2012-12-30 68 views
1

我環顧四周,試圖通過重新編譯我的其他類等來解決此問題,但似乎沒有任何工作。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新手。爲什麼這個錯誤可能會發生?

回答

2

您嘗試在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

1

你試圖調用構造這樣的:

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

那不是你怎麼做。我懷疑你想:

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

更換

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

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

你得到的錯誤,因爲這行代碼:

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

這將工作,而不是:

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

請記住,傳感器[i]是就像例如

SensorSim s; 
s = new SensorSim(sensorNom, sensorErr);