2016-11-23 136 views
1

我試圖讓打印以下數的程序的條件:嵌套while循環不匹配

1 1 
1 2 
1 3 
1 4 
2 1 
2 2 
2 3 
2 4 

的代碼是

public class JavaApplication8 { 

    public static void main(String[] args) { 

     int i = 1; 
     int j = 1; 

     while (i <= 2 && j <= 4) { 

      while (i <= 2 && j <= 4) { 

       System.out.printf("%d%d\n", i, j); 

       j++; 
      } 

      j = j - 4; 

      i++; 

      System.out.printf("%d%d\n", i, j); 
      j++; 

     } 

    } 
} 

該程序打印此

1 1 
1 2 
1 3 
1 4 
2 1 
2 2 
2 3 
2 4 
3 1 

我不知道爲什麼這是在內部條件背後發生的,雖然說我必須小於或等於2

回答

2

由於您的最終println聲明(如下所示)是無條件的,因此它正在輸出最終的3 1。所以在將i增加到3之後,你仍然運行該語句。之後while條件才生效,這就是爲什麼打印後它會停止。

public class JavaApplication8 { 

    public static void main(String[] args) { 

     int i = 1; 
     int j = 1; 

     while (i <= 2 && j <= 4) { 

      while (i <= 2 && j <= 4) { 

       System.out.printf("%d%d\n", i, j); 

       j++; 
      } 

      j = j - 4; 

      i++; 

      System.out.printf("%d%d\n", i, j); // <=== This one 
      j++; 

     } 

    } 
} 

這整個事情可以大大簡化,但:

public class JavaApplication8 { 
    public static void main(String[] args) { 
     for (int i = 1; i <= 2; ++i) { 
      for (int j = 1; j <= 4; ++j) { 
       System.out.printf("%d%d\n", i, j); 
      } 
     } 
    } 
} 

Live Example

+0

所以,沒有辦法,它不會打印31? – Smas

+1

@Smas:你只需要改變你的邏輯。我已經展示了一種可以改變上述邏輯的方法。另一種方法是使'println'有條件的(由'if'來保護),但相對而言,這將是相當不理想的代碼,將這種情況重複三次。 –

+0

是的,如你所說,它已經適用於我。非常感謝。 – Smas