在二维数组上使用 foreach 循环时会发生什么

What happens when you use foreach loop on a 2D array

int[][] winningPositions = 
{{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7}, {2,5,8}, {0,4,8}, {2,4,6}};

    for (int[] winningPosition : winningPositions)
    System.out.println(winningPosition[2]);

这打印 2个 5个 8个 6个 7 8个 8个 6

我不明白为什么,这太随机了,foreach 循环试图做什么?为什么不打印第三组数组 {6,7,8} ? 这是如何工作的?

int[][] winningPositions = 
            {{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7}, {2,5,8}, {0,4,8}, 
{2,4,6}};

                for (int[] winningPosition : winningPositions){
                    for(int i = 0; i < winningPosition.length; i ++){
                        System.out.println(winningPosition[i]);
                   }
               }

图像有一个抽屉,每个抽屉里有 1 张便条。纸币顶部有 x,中间有 y,底部有 z。通过循环,您可以打开每个抽屉并查看每个音符的第三行。仅打印 z.

每次打开抽屉都需要查看所有线条。这样你就可以为每行的笔记打印内容。 winningPosition.length 是那张纸条上有多少行。

查找嵌套循环。

您的 for each 循环实际上是打印二维数组 winningPositions 中每个 winningPosition 数组的第三个元素:

{{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7}, {2,5,8}, {0,4,8}, {2,4,6}}

这条语句winningPosition[2]将获取二维数组winningPositions.

中内部数组的每个第三个元素

您还可以分解每个循环以更好地理解它:

在每次循环的第一次迭代中,它将获得 winningPositions 的第一个元素:

{0,1,2}

那么这条语句winningPosition[2]将得到这个子数组中的第三个元素,即2

在每次循环的第二次迭代中,它将获得 winningPositions 的第二个元素:

{3,4,5}

之后 winningPosition[2] 将得到此子数组中的第三个元素,即 5 依此类推。

这很像在传统的 for 循环中得到 winningPositions[1][2]

更新:

why is it not printing the third set of arrays {6,7,8} ?

我从你的问题中了解到你想要打印二维数组 winningPositions 的第三个子数组。

要打印它,每个循环都不需要任何内容​​

你可以简单地使用方法Arrays.toString来打印它:

System.out.println(Arrays.toString(winningPositions[2]));

输出:

[6, 7, 8]

您的 for 循环遍历每个数组,并在完成后打印内存中的整数。自从您输入:

for (int[] winningPosition : winningPositions)

您要求从 winningPositions 中取出 int[]。因此,在将 3 个整数放入这样的数组后,它在他刚刚配置的数组的内存中有最后一个整数。这就是为什么它只打印出数组的最后一个整数。 如果您想打印出所有原始的 winningPositions,请执行:

for (int winningPosition : winningPosition)

如果您想打印出原始 winningPosition 中每个数组的特定数字,请执行:

for (int[] winningPosition : winningPosition)
    System.out.println(winningPosition[x];

X 是您要打印的整数的索引点。 (数组的第一个索引号始终为 0。) 你也可以用我说的最后一个方法继续一个你本来想做的选区。 (例如,使用另一个 for 循环遍历您在上一个 for 循环中创建的 int[] winningPosition。)

希望对您有所帮助!

我正在提供我目前正在构建的类似的东西....这是打印所有数字和单独的数组,换行和数字用 [],玩一下代码,你将能够打印什么你喜欢...

public class ArrayFinal {

public static void main(String[] args) {

    System.out.println("Array\t Nummbers");
    int Array[][] = { { 2, 43, 23, 43, 23, 43 }, { 3, 5, 6, 7, 6, 5 }, { 34, 42, 44, 24, 6, 7 },
            { 2, 34, 54, 332, 23, 43 }, { 2, 43, 45, 54, 34, 34 }, { 2, 34, 54, 54, 34, 23 } };

    display(Array);

}


// methodos gia na dimiourgisoume to rows kai ta columns
public static void display(int x[][]) {


    for (int row = 0; row < x.length; row++) {

        StringBuilder str_buf = new StringBuilder();
        str_buf.append((row + 1) + ".");
        for (int column = 0; column < x[row].length; column++) {

            str_buf.append("\t" + "[" + x[row][column] + "]");// tiponi ta noumera pou vriskonte mesa stin klirosi


        }
        System.out.println(str_buf.toString());// tiponi to noumero tis klirosis

    }
}

}

结果:

1.  [2] [43] [23] [43] [23] [43]
2.  [3] [5] [6] [7] [6] [5]
3.  [34] [42] [44] [24] [6] [7]
4.  [2] [34] [54] [332] [23] [43]
5.  [2] [43] [45] [54]  [34] [34]
6.  [2] [34] [54] [54]  [34] [23]  

我是 java 中的新成员,并且由于此 post 处于活动状态,如果有人可以向我展示从这些数组中显示 Occurances 的方法,那就太好了,我几乎尝试了所有方法....