2014-02-23 153 views
-1

所以我想打印这个代码..它说:印刷阵列

非 - 静态方法雨水不能从静态上下文访问。

现在的问题是打印所有月份的名称及其降雨量并列和总平均值以及降雨量最高和最低的月份。
请帮我一把。

public class rainfall 
{ 

    String[] rain = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; 
    double[] values = { 0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53}; 


    public double Total(double total) 
    { 
     total = 0; 

     for(int i = 0 ; i < values.length ; i ++) 
     { 
      total += values[i]; 
     } 

     return total; 
    } 

    public double Average(double average) 
    { 
     double total = 0; 
     Total (total); 
     for (int j = 0; j < values.length; j ++) 
     { 
      average = total/values.length ; 
     } 

     return average; 
    } 

    public String mostRain (double high,String highest) 
    { 
     high = values[0]; 

     for(int i = 1 ; i < rain.length ; i ++) 
     { 
      if (values[i]>high) 
      { 
       highest = rain[i]; 
      } 
      return highest; 

     } 
    } 

    public String leastRain (String least, double low) 
    { 
     least = ""; 
     low= values[0]; 

     for(int i = 1; i < rain.length ; i++) 
     { 
      if (values[i]<low) 
      { 
       least = rain[i]; 
      } 

      return least; 
     } 
    } 

    public static void main(String[]Args) 
    { 
     String highest = "" ; 
     String least = ""; 
     double total = 0 ; 
     double average = 0 ; 
     double high = 0; 
     double low = 0; 



     System.out.println(" AUSTIN Tx RAINFALL 2009 "); 

     for(int i = 0 ; i < rain.length ; i ++) 
     { 
      System.out.println(rain[i]+"\t"+values[i]); 
     } 

     System.out.println(Total(total)); 
     System.out.println(Average(average)); 
     System.out.println(mostRain(highest,high)); 
     System.out.println(leastRain(least,low)); 

    } 
} 
+1

您可能要检查出[类的方法和字段]官方教程(http://docs.oracle.com/javase/tutorial/java/ javaOO/classvars.html)。 –

回答

0

您需要添加“静态”到所有你的方法,以及你在开始定义的变量(数组“雨”和“价值”)。

你应该总是考虑,只要你不使用你正在使用的类中定义的属性设置你的方法为静态(例如,计算平均值的方法,通常只对你作为参数的值取决于)。

0

实例变量无法以静态方法访问,例如main。你必须使所有的字段和方法都是静态的。

static String[] rain = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; 
static double[] values; 
public static String mostRain(... 
public static String leastRain(... 
0

你的问题是你的主要方法是static但其他方法和变量不是。

要么你需要创建的rainfall的实例并调用该实例的方法或使所有的方法和变量静态的了。

0

更改此

String[] rain = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; 
double[] values = { 0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53}; 

static String[] rain = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; 
static double[] values = { 0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53}; 

把(非静态的)变量到主函数本身,然后根据需要将它们传递到功能。如

public static final void main(String[] ignored) { 
    String[] rain = { "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec" }; 
    double[] values = { 0.40,0.94,3.21,3.74,1.73,1.03,1.27,2.58,6.98,6.90,2.80,2.53}; 

    Total(values); 

所有功能通过主叫,因为被别人说,要么需要是静态的,以及,或者通过被称为一个新的实例。

(并请,改变功能名称为小写)。

0

要调用的静态上下文的方法:

System.out.println(Average(...)); 

这意味着,您所使用的方法没有对象范围内使用它,即object.Average(...)

必须要么

  • 声明方法是静态的:

    公共静态双平均值(...){

  • 或者使用方法在物体上:

    YourObject OBJ =新YourObject(); obj.Average(...);

PS:方法应该以小写字符开头。

0

由于这些方法是非静态的,它们只能通过该类的一个对象访问。当您运行静态方法时,它们不会通过实例化对象运行,因此它们无法访问非静态方法。

所以你要做的是在main中创建一个Rainfall对象并调用该对象上的方法。这是通常如何做的。一般来说,main()方法本身并不做很多工作,但创建一个对象并调用该对象的方法来完成实际的工作。

所以,你会做这样的事情:

public class Rainfall { 
    //your methods from above 

    public static void main(String[]Args) { 
     String highest = "" ; 
     String least = ""; 
     double total = 0 ; 
     double average = 0 ; 
     double high = 0; 
     double low = 0; 

     Rainfall rain = new Rainfall(); 
     System.out.println(" AUSTIN Tx RAINFALL 2009 "); 

     for(int i = 0 ; i < rain.length ; i ++) { 
      System.out.println(rain[i]+"\t"+values[i]); 
     } 

     System.out.println(rain.Total(total)); 
     System.out.println(rain.Average(average)); 
     System.out.println(rain.mostRain(highest,high)); 
     System.out.println(rain.leastRain(least,low)); 

    } 

}