打印N x N表时无限循环

时间:2014-12-13 13:17:23

标签: java infinite-loop

考虑以下Java程序:

public class RelativelyPrime {
    public static void main(String[] args) {
        int N = Integer.parseInt(args[0]); // Dimensions of grid
        int i, j;
        int r; // Remainder when i is divided by j

        for (i = 1; i <= N; i++) {
            for (j = 1; j <= N; j++) {
                do { // Using Euclidean algorithm
                   r = i % j;
                   i = j;
                   j = r;
                } while (r > 0);
                if (i == 1) System.out.print("*");
                else System.out.print(" ");
            }
            System.out.println();
        }
    }
}

该程序打印N×N表(或矩阵,如果您愿意),其中N是命令行参数 如果i和j是相对素数,则(i,j)-entry是*,如果它们不是相对素数,则是单个空格。例如,当我通过输入java RelativelyPrime 3来运行程序时,它会无休止地打印*。为什么会这样?

2 个答案:

答案 0 :(得分:3)

您在while循环中更改了ij

    for (i = 1; i <= N; i++) {
        for (j = 1; j <= N; j++) {
            int ii = i, jj = j;
            do { // Using Euclidean algorithm
               r = ii % jj;
               ii = jj;
               jj = r;
            } while (r > 0);
            if (ii == 1) System.out.print("*");
            else System.out.print(" ");
        }
        System.out.println();
    }

答案 1 :(得分:1)

这是使用调试器可以帮助您解决问题的地方。

在你的循环中,你改变了ij,这意味着它们永远不会到达N,因此你有一个无限循环。

我建议你不要改变这些变量,而应使用两个新变量,理想情况下是有意义的名称。