1

無知ですみません。私は初心者です:

次のコードで次のコンパイル エラーが発生するのはなぜですか? [行: 16] 非静的変数 x は静的コンテキストから参照できません

public class average{
int [] numbers = {2,3,4,5,6};
double x = averageMark(numbers);

public static double averageMark(int [] numbers){
    int sum = 0;  
    double average = 0.000;
    for (int i = 0; i < numbers.length; i++){  
      sum = numbers [i] + sum;  
      average = sum/numbers.length;  
    }
    return average;
  }

  public static void main (String [] args){
  System.out.println(x);
  }
}
4

2 に答える 2

3

エラーはそれをすべて言います

非静的変数 x は静的コンテキストから参照できません

x静的変数にする必要があります。

static double x = averageMark(numbers);

または Average のインスタンスを作成してアクセスします。

 public static void main (String [] args){
   System.out.println(new Average().x);
  }

ところで、クラス名は大文字で始めるという規則があります。

@ mgaertが指摘したように、数値配列も静的にする必要があるため、静的メソッドで使用します。

static int [] numbers = {2,3,4,5,6};
于 2013-01-31T14:05:08.270 に答える
1

静的メソッドまたは変数は、特定のオブジェクトに関連付けられるのではなく、クラス全体に関連付けられます。これらは、クラスがロードされるときに割り当てられます。静的メソッド内からインスタンス変数を使用しようとすると、コンパイラは「どのオブジェクトのインスタンス変数について話しているのかわからない!」と考えます。ただし、クラスの新しいインスタンスを作成する場合はaverage、このインスタンスを介してアクセスできるため、次のように変更します。

public class average{
public int [] numbers = {2,3,4,5,6};
public double x;   
public static double averageMark(int [] numbers){
    int sum = 0;  
    double average = 0.000;
    for (int i = 0; i < numbers.length; i++){  
      sum = numbers [i] + sum;  
      average = sum/numbers.length;  
    }
    return average;
  }

  public static void main (String [] args){
  average a = new average(); // creating new instance 'a'
  a.x = average.averageMark(a.numbers); // assigning to variable 'x' of instance 'a' result of averageMark
  System.out.println(a.x); // output a
  }
}
于 2013-01-31T14:27:57.423 に答える