2014-02-23 78 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)); 

    } 

}