2010-12-15 42 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) { 
      ... 
     } 
     ... 
    }