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

时间:2010-12-15 09:06:31

标签: java types foreach

我在最近的项目中将一堆普通的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("");
    }

imgMap 是一个二维int数组(int[][])来保存“地图”
mapBR 是外部文件的BufferedReader,其中“map”取自
第一个嵌套for循环集读取文件,第二个嵌套for-each集将其写入控制台以确保正确读取。

我无法看到第一个循环设置工作的方法 - 每个循环,这是一个子问题,如果有人可以帮助我,我会很高兴。

无论如何,回到主要问题。当我(尝试)编译这个时,编译器重新发出一个错误,说明int[] c : imgMap[r]行有不兼容的类型,但是,这就是捕获,当我将它更改为int c : imgMap[r]时,它会咳嗽同样的错误!因为我无法看到除了这些类型之外的任何其他类型,我感到很沮丧。

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

IAmThePiGuy

7 个答案:

答案 0 :(得分: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]);            
    }
}

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

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

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

答案 1 :(得分:4)

您尝试使用r int [],只需int。这是错误的。将其修复为

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

答案 2 :(得分:3)

int[] c : imgMap[r]

作为数组的索引int并且您提供了int[]

应该是

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

答案 3 :(得分:3)

这是它的工作原理:

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

外部for循环提供矩阵中的所有行,内部for循环来自行的所有单元格。

答案 4 :(得分:3)

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

答案 5 :(得分:3)

如果我理解这是正确的,那就必须是这样的:

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

答案 6 :(得分:2)

您需要编码

for (int c : r)