我环顾四周试图通过重新编译其他类来解决这个问题,但似乎没有任何工作。
我有两个文件,在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的新手。为什么可能会发生此错误?
答案 0 :(得分:2)
您尝试在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
。
答案 1 :(得分:1)
您正试图像这样调用构造函数:
sensors[i].SensorSim(sensorNom, sensorErr);
这不是你怎么做的。我怀疑你想要:
sensors[i] = new SensorSim(sensorNom, sensorErr);
答案 2 :(得分:1)
替换
sensors[i].SensorSim(sensorNom, sensorErr);
与
sensors[i] = new SensorSim(sensorNom, sensorErr);
答案 3 :(得分:1)
由于这行代码,您收到错误:
sensors[i].SensorSim(sensorNom, sensorErr);
这将起作用,而不是:
sensors[i] = new SensorSim(sensorNom, sensorErr);
请记住,传感器[i]就好像是
SensorSim s;
s = new SensorSim(sensorNom, sensorErr);