Java错误:无法从对象数组中找到符号
问题描述:
我环顾四周,试图通过重新编译我的其他类等来解决此问题,但似乎没有任何工作。Java错误:无法从对象数组中找到符号
我有两个文件,在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
实例(sensors[i]
),它甚至没有在存在运行名为SensorSim(double, double)
方法这点。
如果你的意思在每个数组元素是创造一个SensorSim
例如,
sensors[i].SensorSim(sensorNom, sensorErr);
应该变成:
sensors[i] = new SensorSim(sensorNom, sensorErr);
更重要的是,你的runSimulation()
方法采用double
作为参数和用途(sensors = new SensorSim[numOfSensors];
):这个double
将“downcast”到一个int
。
答
你试图调用构造这样的:
sensors[i].SensorSim(sensorNom, sensorErr);
那不是你怎么做。我怀疑你想:
sensors[i] = new SensorSim(sensorNom, sensorErr);
答
更换
sensors[i].SensorSim(sensorNom, sensorErr);
与
sensors[i] = new SensorSim(sensorNom, sensorErr);
答
你得到的错误,因为这行代码:
sensors[i].SensorSim(sensorNom, sensorErr);
这将工作,而不是:
sensors[i] = new SensorSim(sensorNom, sensorErr);
请记住,传感器[i]是就像例如
SensorSim s;
s = new SensorSim(sensorNom, sensorErr);
完美编译没有问题。我在调试时将double改为int,但没有改变我的帖子。非常感谢。 – ubiQ