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

+0

完美编译没有问题。我在调试时将double改为int,但没有改变我的帖子。非常感谢。 – ubiQ

你试图调用构造这样的:

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);