繁体   English   中英

Java-突破内循环

[英]Java- breaking out of an inner loop

我有一个2D数组,需要制作一个遍历每一行的for循环,并在整数停止连续增加时找到index + 1。 例如,如果第一行是{1,2,3,4,9,10,11,20},则我的方法应设置count1 = 4 break语句旨在终止内部循环并继续执行外部循环的下一个序列。

 public static int[][] reshuffle(int[][] board) {
        int count1 =0;
        int count2 =0;
        int count3 =0;
        int count4 =0;
        for(int i=0;i<4;i++) {
            for (int j = 0; j < 14; j++) {
                if (i==0 && board[i][j] + 1 != board[0][j + 1]) {
                    count1 = j+1;
                    break;
                } else if (i==1 && board[i][j] + 1 != board[1][j] + 1) {
                    count2 = j+1;
                    break;
                } else if (i==2 && board[i][j] + 1 != board[2][j] + 1) {
                    count3 = j+1;
                    break;
                } else if (i==3 && board[i][j] + 1 != board[3][j] + 1) {
                    count4 = j+1;
                    break;
                }

            }
        }
}

我的程序将为count1返回正确的值,但对于count2,count3和count4始终返回0。 这向我表明,break语句以某种方式终止了外部循环以及内部循环。

我认为您有逻辑错误,因为i = 3 board[i][j] + 1等于board[3][j] + 1我想您打算做的是:

public static int[][] reshuffle(int[][] board) {
    int count1 = 0;
    int count2 = 0;
    int count3 = 0;
    int count4 = 0;

    for(int i=0;i<4;i++) {
       for (int j = 0; j < 14; j++) {
           if (i==0 && board[i][j] + 1 != board[0][j + 1]) {
               count1 = j+1;
               break;
           } else if (i==1 && board[i][j] + 1 != board[1][j + 1]) {
               count2 = j+1;
               break;
            } else if (i==2 && board[i][j] + 1 != board[2][j + 1]) {
                count3 = j+1;
                break;
             } else if (i==3 && board[i][j] + 1 != board[3][j + 1]) {
                count4 = j+1;
                break;
             }
        }   
    }
}

您可以使用标签并破坏这些标签,但这不是一个好方法

public static int[][] reshuffle(int[][] board) {
        int count1 =0;
        int count2 =0;
        int count3 =0;
        int count4 =0;
        for(int i=0;i<4;i++) {
            level1:
            for (int j = 0; j < 14; j++) {
                if (i==0 && board[i][j] + 1 != board[0][j + 1]) {
                    count1 = j+1;
                    break level1;
                } else if (i==1 && board[i][j] + 1 != board[1][j] + 1) {
                    count2 = j+1;
                    break level1;
                } else if (i==2 && board[i][j] + 1 != board[2][j] + 1) {
                    count3 = j+1;
                    break level1;
                } else if (i==3 && board[i][j] + 1 != board[3][j] + 1) {
                    count4 = j+1;
                    break level1;
                }

            }
        }
}

我建议重构代码以避免内部循环,例如使用单独的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM