1

私は周りを見回して、他のクラスなどを再コンパイルすることでこの問題を解決しようとしましたが、何もうまくいかないようです。

SensorDataDisplay.java に 2 つのファイルがあり、次のコードがあります。

private SensorSim[] sensors;

...

public void runSimulation(double numberOfSensors)  {
  sensors = new SensorSim[numOfSensors];
  int i = 0;

  for(i = 0; i<numOfSensors; i++) {
    sensors[i].SensorSim(sensorNom, sensorErr);
  }
}

そして、同じディレクトリで、SensorSim.java を SensorSim.class にコンパイルしました。コンストラクターは以下のとおりです。

public SensorSim(double n, double d) {
    if (probs == null)
      loadData();
    nominal = n; sd = d;
    rng = new Random();
    running = true;
}

これは、単一の sensorSim を作成したときに機能していました。私は最近、このエラーが発生した時のセンサーシムの配列を追加しました:

$ javac SensorDataDisplay.java

SensorDataDisplay.java:44: cannot find symbol
symbol  : method SensorSim(double,double)
location: class SensorSim
      sensors[i].SensorSim(sensorNom, sensorErr);
            ^
1 error

周りを見回すと、古いクラス ファイルに関係している可能性があることがわかったので、他のファイル (SensorSim.class) を削除して再コンパイルしました。私が読んだもう1つの考えられる理由は、スコープに関するものでしたが、私には問題ないように見えますが、Javaは初めてです。このエラーが発生する理由は何ですか?

4

4 に答える 4

2

インスタンス( )で呼び出さSensorSim(double, double)れたメソッドを実行しようとしましたが、この時点では存在していません。SensorSimsensors[i]

SensorSim意味するのが各配列要素でインスタンスを作成することだった場合、

sensors[i].SensorSim(sensorNom, sensorErr);

次のようになります。

sensors[i] = new SensorSim(sensorNom, sensorErr);

さらに、runSimulation()メソッドはdouble引数としてaを取り、それを使用して配列(sensors = new SensorSim[numOfSensors];)のサイズを決定します。これdoubleは。に「ダウンキャスト」されますint

于 2012-12-30T22:36:09.207 に答える
1

次のコード行が原因でエラーが発生します。

sensors[i].SensorSim(sensorNom, sensorErr);

代わりに、これは機能します。

sensors[i] = new SensorSim(sensorNom, sensorErr);

センサー[i]は例えば持っているようなものだということを覚えておいてください

SensorSim s; 
s = new SensorSim(sensorNom, sensorErr);
于 2012-12-30T22:37:12.783 に答える
1

次のようにコンストラクターを呼び出そうとしています。

sensors[i].SensorSim(sensorNom, sensorErr);

それはあなたのやり方ではありません。私はあなたが欲しいと思う:

sensors[i] = new SensorSim(sensorNom, sensorErr);
于 2012-12-30T22:34:31.000 に答える
1

交換

sensors[i].SensorSim(sensorNom, sensorErr);

sensors[i] = new SensorSim(sensorNom, sensorErr);
于 2012-12-30T22:35:13.887 に答える