Java For-each循环数据类型不匹配

cor*_*ces 0 java foreach types

在我最近的项目中,我正在将一堆普通的for循环转换为for-each循环,并遇到了一个矛盾的问题.

    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("");
    }
Run Code Online (Sandbox Code Playgroud)

imgMap是一个二维int数组(int[][])来保存'
map'mapBR是外部文件的BufferedReader,'map'取自
第一个嵌套for循环集读取文件,第二个嵌套for-each集写入它到控制台,以确保它被正确读取.

我找不到一种方法来使第一个for循环集工作为 - 每个循环,这是一个子问题,如果有人可以帮助我,我会很高兴.

无论如何,回到主要问题.当我(尝试)编译这个时,编译器反刍一个错误,说该int[] c : imgMap[r]行有不兼容的类型,但是,这里是捕获,当我改变它时int c : imgMap[r],它会咳出同样的错误!由于我无法看到除了这些类型之外的任何其他类型,我感到很沮丧.

我希望我提供了足够的信息.

IAmThePiGuy

Jon*_*eet 5

在第一个循环中,您需要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]);            
    }
}
Run Code Online (Sandbox Code Playgroud)

在第二个循环中,您只需要遍历r,而不是通过imgMap[r]:

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

基本上,您需要仔细考虑所涉及的类型 - 变量是表示数组的索引还是数组本身.