package learn;//这是我写的书上习题一个小程序,我现在想在类里定义面积s和周长v为成员变量,然后由主函数
//main来调用他们然后输出。但是发觉,这个访问权限怎么设置都不行。只能写了这么一大长串的表达式。
import java.lang.*;
public class sanJiao { /**计算三角形的周长面积
 * @param args
 */
     private static int width;
     private static int high;
     public void setwidth(int width){
     sanJiao.width=width;
     }
     public void sethigh(int high){
     sanJiao.high=high;
     }
     public int gethigh(int high){
    
     return high;
     }
     public int getwidth(int width){
      
      return width;
     }     public  int mianji(int width,int high){//方法前面加不加static好像都不影响程序
     return width*high;
     }
     public int zhouchang(int width,int high){
     return 2*(width+high);
     }
public static void main(String[] args) {
// TODO Auto-generated method stub
   sanJiao sanjiao=new sanJiao();
System.out.println("width is : "+args[0]);
System.out.println("high is : "+args[1]);
     sanjiao.width=Integer.parseInt(args[0]);
     sanjiao.high=Integer.parseInt(args[1]);
      System.out.println("面积是 : "+sanjiao.mianji(width,high));
      System.out.println("周长是 : "+sanjiao.zhouchang(width,high));
      
}}

解决方案 »

  1.   

    private static int width;
    这里的static干吗?
    你直接定义一个private int mianji;
                public static int getMianji(){
                        return width*high;
                }
    加一个static来修饰一下就可以在这个方法里调用了
      

  2.   

    package learn;
    public class sanJiao { /**计算三角形的周长面积
     * @param args
     */
         private static int width;
         private static int high;
    private int s;
         public void setwidth(int width){
         sanJiao.width=width;
         }
         public void sethigh(int high){
         sanJiao.high=high;
         }
         public int gethigh(int high){
        
         return high;
         }
         public int getwidth(int width){
          
          return width;
         }     public static int mianji(int width,int high){
         int s=width*high;
         return s;
         }
         public int zhouchang(int width,int high){
         return 2*(width+high);
         }
    public static void main(String[] args) {
    // TODO Auto-generated method stub
       sanJiao sanjiao=new sanJiao();
    System.out.println("width is : "+args[0]);
    System.out.println("high is : "+args[1]);
         sanJiao.width=Integer.parseInt(args[0]);
         sanJiao.high=Integer.parseInt(args[1]);
          System.out.println("面积是 : "+sanjiao.s);
          System.out.println("周长是 : "+sanjiao.zhouchang(width,high));
          
    }}
    写成这样,但是面积打出来的是0 没有调用mianji方法
      

  3.   

    public class sanJiao {    /**计算三角形的周长面积
         * @param args
         */
            private static int width;
            private static int high;
            private int s;
            private int v;
            public void setwidth(int width){
                sanJiao.width=width;
            }
            public void sethigh(int high){
                sanJiao.high=high;
            }
            public int gethigh(int high){
                
                return high;
            }
            public int getwidth(int width){
                 
                 return width;
            }        public  int getS(int width,int high){//方法前面加不加static好像都不影响程序
             s=width*high;
                return s;
            }
            public int getV(int width,int high){
             v=2*(width+high);
                return v;
            }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
           sanJiao sanjiao=new sanJiao();
            System.out.println("width is : "+args[0]);
            System.out.println("high is : "+args[1]);
            sanjiao.width=Integer.parseInt(args[0]);
            sanjiao.high=Integer.parseInt(args[1]);
             System.out.println("面积是 : "+sanjiao.getS(sanjiao.width,sanjiao.high));
             System.out.println("周长是 : "+sanjiao.getV(sanjiao.width,sanjiao.high));
             
        }}
      

  4.   

    ---------- javac ----------
    F:\java\sanJiao.java:42: 无法从静态上下文中引用非静态 变量 s
             System.out.println("面积是 : "+s);
                                         ^
    F:\java\sanJiao.java:43: 无法从静态上下文中引用非静态 变量 v
             System.out.println("周长是 : "+v);
                                         ^
    2 错误输出完成 (耗时 4 秒) - 正常终止楼上调试出错。我的意思就是大家能不能改成,用s  v直接在main中调用。
      

  5.   

    static 修饰符是在独立于类存在的. 对于这个static修改符的成员变量或方法 ,也只能在static静态变量或方法来调用.
    在你的类中静态变量设成私有的.那么你做法的目的是什么呢.如果只是供类内部调用.为何不去掉静态修饰符?
     如果是想在外部类中调用sanJian类中的变量,那么就不应用私有修饰符! 
      

  6.   

    //package learn;//这是我写的书上习题一个小程序,我现在想在类里定义面积s和周长v为成员变量,然后由主函数
    //main来调用他们然后输出。但是发觉,这个访问权限怎么设置都不行。只能写了这么一大长串的表达式。
    import java.lang.*;
    import java.util.Scanner;public class sanJiao { /**
     * 计算三角形的周长面积
     * 
     * @param args
     */ private static int width;
    private static int high; public void setwidth(int width) {
    this.width = width;
    } public void sethigh(int high) {
    this.high = high;
    } public int gethigh(int high) { return high;
    } public int getwidth(int width) { return width;
    } public int mianji(int width, int high) {// 方法前面加不加static好像都不影响程序
    return width * high;
    } public int zhouchang(int width, int high) {
    return 2 * (width + high);
    } public static void main(String[] args) {
    // TODO Auto-generated method stub
    sanJiao sanjiao = new sanJiao();
    Scanner scan = new Scanner(System.in); System.out.println("Input width:");
    int a = scan.nextInt();
    sanjiao.setwidth(a);

    System.out.println("Input high:");
    int b = scan.nextInt();
    sanjiao.sethigh(b); System.out.println("width is : "+sanjiao.getwidth(width));
    System.out.println("high is : "+sanjiao.gethigh(high));
    System.out.println("面积是 : " + sanjiao.mianji(width, high));
    System.out.println("周长是 : " + sanjiao.zhouchang(width, high)); }}不知道这样改符合你的意思?
      

  7.   

    我是想System.out.println("周长是   :   "+v);
    在main中这样调用 
      

  8.   

    哦!你早说呀,不是很方便的.public class sanJiao {    /**计算三角形的周长面积
         * @param args
         */
            private static int width;
            private static int high;
            private static int s;
            private static int v;
            /*public void setwidth(int width){
                sanJiao.width=width;
            }
            public void sethigh(int high){
                sanJiao.high=high;
            }
            public int gethigh(int high){
                
                return high;
            }
            public int getwidth(int width){
                 
                 return width;
            }*/        public  int getS(int width,int high){//方法前面加不加static好像都不影响程序
             s=width*high;
                return s;
            }
            public int getV(int width,int high){
             v=2*(width+high);
                return v;
            }
        public static void main(String[] args) {
            // TODO Auto-generated method stub
           sanJiao sanjiao=new sanJiao();
            System.out.println("width is : "+args[0]);
            System.out.println("high is : "+args[1]);
            sanJiao.width=Integer.parseInt(args[0]);
            sanJiao.high=Integer.parseInt(args[1]);
            s=sanjiao.getS(sanjiao.width,sanjiao.high);
            v=sanjiao.getV(sanjiao.width,sanjiao.high);
             System.out.println("面积是 : "+s);
             System.out.println("周长是 : "+v);
             
        }}