2010-12-15 191 views
0

我在最近的項目中將一些普通的for循環轉換爲for循環,並且遇到了一個矛盾的問題。Java對於每個循環的數據類型不匹配

imgMap = new int[rows][cols]; 

    for (int r=0; r<imgMap.length; r++) { 
     rowArray = mapBR.readLine().split(","); 
     for (int c=0; c<imgMap[r].length; c++) { 
      imgMap[r][c] = Integer.parseInt(rowArray[c]); 
     } 
    } 

    System.out.println(imgMap.length+", "+imgMap[0].length); 

    // print array in rectangular form 
    for (int[] r : imgMap) { 
     for (int[] c : imgMap[r]) { 
      System.out.print(" " + c[0]); 
     } 
     System.out.println(""); 
    } 

imgMap是二維int數組(int[][])用於保持「地圖」
mapBR是外部文件,該「映射」從
第一個採取的一個BufferedReader嵌套for循環集讀取文件,第二個嵌套for-each集將其寫入控制檯以確保其正確讀取。

我看不到一種方法可以將循環設置爲第一循環,因爲這是一個子問題,如果有人能夠幫助我,我會很高興。

無論如何,回到主要問題。當我(嘗試)編譯這個編譯器反芻錯誤說,int[] c : imgMap[r]行具有不兼容的類型,但是,這裏是捕獲,當我將其更改爲int c : imgMap[r],它咳嗽了同樣的錯誤!因爲我不明白它是如何可能是除了這些類型之一,我flummoxed。

我希望我已經提供了足夠的信息。

IAmThePiGuy

+0

感謝大家誰這麼快回答,但它仍然使我驚奇這個在線社區的溫暖。順便說一句,如果有人可以想出一種方法來將嵌套設置爲嵌套for-each集合類似,我將不勝感激。 – cortices 2010-12-15 09:16:04

+0

全部解決了並且快樂的編譯器! – cortices 2010-12-15 09:36:14

回答

4

在第一循環中,你需要c是一個int這樣您就可以訪問rowArray[c] - 但這應該工作:

for (int[] row : imgMap) { 
    String[] rowArray = mapBR.readLine().split(","); 
    for (int c = 0; c < row.length; c++) { 
     row[c] = Integer.parseInt(rowArray[c]);    
    } 
} 

在第二個循環中,您只需要遍歷r,而不是通過imgMap[r]

for (int[] row : imgMap) { 
    for (int value : row) { 
     System.out.print(" " + value); 
    } 
    System.out.println(""); 
} 

基本上,你需要仔細考慮所涉及的類型 - 變量是否代表指數到一個數組或數組本身。

+0

哇...我保證Jon Skeet的答案!謝謝,這正是我想要的。 – cortices 2010-12-15 09:18:05

3
int[] c : imgMap[r] 

爲數組的索引需要int和您所提供的int[]

應該

for (int[] r : imgMap) { 
     for (int c : r) { 
      System.out.print(" " + c); 
     } 
     System.out.println(""); 
    } 
3

這是它如何工作的:

for (int[] row : imgMap) { 
    for (int cell : row) { 
    System.out.print(" " + cell); 
    } 
    System.out.println(""); 
} 

outer for loop提供矩陣中的所有行,inner用於循環來自行的所有單元。

4

您正在嘗試使用r,這是一個int [],正如int。這是錯誤的。其固定

for (int c : r) { 
    ... 
} 
2

你需要編寫

for (int c : r) 
3
for (int[] r : imgMap) { 
    for (int c : r) { 
     System.out.print(" " + c); 
    } 
    System.out.println(""); 
} 
3

如果我理解這是正確的它必須是這樣的:

for (int[] r : imgMap) { 
     for (int c : r) { 
      ... 
     } 
     ... 
    }