我环顾四周,尝试通过重新编译其他类等解决此问题,但似乎没有任何效果。

我有两个文件,在SensorDataDisplay.java中,我具有以下代码:

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时,这是可行的。我最近添加了sensorSims数组,这是我收到此错误的时间:

$ 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)。我读过的另一个可能的原因与范围有关,但对我来说似乎还可以,但是我是Java新手。为什么可能会发生此错误?

最佳答案

您尝试在SensorSim(double, double)实例(SensorSim)上运行名为sensors[i]的方法,该方法目前还不存在。

如果您的意思是在每个数组元素上创建一个SensorSim实例,

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


应该变成:

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


而且,您的runSimulation()方法将double作为参数,并使用该参数来调整数组(sensors = new SensorSim[numOfSensors];)的大小:此double将被“向下转换”为int

09-10 15:06