询问嵌套循环内的while循环

时间:2019-11-07 11:33:57

标签: java

任何人都可以解释它实际上如何工作吗?香港专业教育学院一直认真地检查我的笔记的每一步,并写下所有,它的确很好,但为什么总是4点?当我用0初始化它时,对我来说就没有意义...

这是输出 enter image description here

    Random rand = new Random();
    int[][] map = new int[row][column];
    int spot = 0;
    int i=0;
    int j=0;

    /*ignore this part
    for(i = 0; i<map.length; i++){
        for(j = 0; j<map[i].length; j++) {
            map[i][j] = rand.nextInt(2);
        }
        System.out.println();
    }*/

    System.out.println();

    for(i =0; i<map.length; i++){
        for(j =0; j<map[i].length; j++){
            if(map[i][j] == 1){
                while(spot<4){
                    map[i][j] = 5;
                    spot++;
                }
            }

            System.out.print(map[i][j]+" ");

        }
        System.out.print(spot);
        System.out.println();
    }


    System.out.println();

}

1 个答案:

答案 0 :(得分:1)

我不确定您要使用spot做什么,但这是您的问题。第一次if(map[i][j] == 1)为真时,您会将spot增加到4,因此不会再次执行while(spot<4)。如果删除它,它将起作用。

if(map[i][j] == 1){
    map[i][j] = 5;
}

修改

根据注释,如果您只想替换4 1,则可以将替换内容提取到方法中,并在交换4 1后立即返回

public void replaceOnes(int[][] map) {
    int spot = 0;
    for(int i = 0 ; i < map.length ; i++){
        for(int j = 0 ; j < map[i].length ; j++){
            if(map[i][j] == 1){
                map[i][j] = 5;
                spot++;
                if (spot == 4) {
                    return;
                }
            }
        }
    }
}

replaceOnes(map);

for(i = 0; i<map.length; i++){
     for(j = 0; j < map[i].length; j++){
        System.out.print(map[i][j]+" ");
     }
     System.out.println();
}