2014-12-13 85 views
0

考慮以下Java程序時:無限循環印刷N×N的表

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它無休止地打印*。這是爲什麼發生?

回答

1

這是使用調試器可以幫助您解決問題的地方。

在你的循環中,你改變了ij這意味着他們永遠不會達到N,因此你有一個無限循環。

我建議你不要改變這些變量,而是使用兩個新變量,理想情況下使用有意義的名稱。

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(); 
    }