我在下面的代碼段中遇到了問題,並且已經將它縮小了很多,但需要專家的注意才能解釋它爲什麼會中斷。在If和Else中定義變量,java
下面的代碼是圖論問題的一部分,節點(宇航員)與邊(給出)一起給出,結果圖中有多個未連接的子圖。我正在解決的問題不需要將不連接的節點創建爲對象。
我通過迭代輸入中提供的每個配對名稱(整數)來創建單個節點。然後將這些節點對象提供給Edge對象的構造函數。 爲了確保我不會創建相同節點的重複項,我創建了一個列表來檢查節點的名稱(int)尚未給出。 如果尚未提供節點名稱,則會創建一個新節點作爲變量A或B. 如果名稱HAS已被提供,則循環將查找現有節點對象並將其分配給佔位符變量A或B.
我得到了3至最後一行編譯時錯誤(在Hackerrank.com編輯工作)下面的代碼:
「錯誤:無法找到符號 配對P =新的配對(A,B ); ^ 符號:變量A「 (對於兩個變量A & B此錯誤發生相同,此處僅顯示一條錯誤消息) 我知道聲明/選擇變量A & B的if(){} else {}部分引入了此錯誤,但是我的代碼需要if/else檢查。
有人可以解釋爲什麼下面的代碼拋出這個錯誤,或建議替代方法來解決這個問題?非常感謝!
public static void main(String[] args) throws Exception {
//...
ArrayList<Pairing> allPairings = new ArrayList<>(0);
ArrayList<Astronaut> allAstronauts = new ArrayList<>(0);
ArrayList<Integer> givenInts = new ArrayList<>(0);
for (int i = 0; i < I; i++) {
temp = bfr.readLine().split(" ");
int a = Integer.parseInt(temp[0]);
int b = Integer.parseInt(temp[1]);
// Check values against list to see if they have been given before
if (!(givenInts.contains(a))) {
Astronaut A = new Astronaut(a);
allAstronauts.add(A);
} else {
// Check all current astronauts for same name
for (int t = 0; t < allAstronauts.size(); t++) {
if (allAstronauts.get(t).getName() == a) {
Astronaut A = allAstronauts.get(t);
}
}
}
if (!(givenInts.contains(b))) {
Astronaut B = new Astronaut(b);
allAstronauts.add(B);
} else {
// Check all current astronauts for same name
for (int r = 0; r < allAstronauts.size(); r++) {
if (allAstronauts.get(r).getName() == b) {
Astronaut B = allAstronauts.get(r);
}
}
}
givenInts.add(a);
givenInts.add(b);
Pairing P = new Pairing(A,B);
allPairings.add(P);
}
您需要首先聲明,它在您需要的範圍內。 – SLaks
你爲什麼重新定義變量? – Li357
感謝您的回答,我可以通過在不同部分定義變量來解決問題,但我不確定我是否明白爲什麼會出現問題。 代碼工作完美的很好地循環回來相同的「宇航員A =新宇航員(輸入);多次,只有當它被包含在if/else語句中時失敗: -/ –