2014-01-20 90 views
1

我需要做一個循環模式,一個熟悉的練習,您可以輸入高度並獲得一定的模式。我需要生成的模式如下:循環模式

AA 
AABB 
AABBAA 

上面是高度爲3的模式。我似乎無法獲得任何輸出。任何想法什麼是錯的?我看過示例代碼,但我似乎無法弄清楚我的最新錯誤。

import java.util.Scanner; 

public class P4 { 

    public static void main(String[] args) { 

     Scanner userInputScanner = new Scanner(System.in); 
     int height = userInputScanner.nextInt(); 
     int i=0, line = 0, a; 


     // Start setting out the lines 
     for (i = 1; i != height ; i++){ 
      System.out.printf("i = " + i); 

      a = i; 
      // Printing out individual lines 
      for(line = i; line == 0; line--){ 

      // Every ODD part print AA 
       if (i%2 != 0) 
      System.out.printf("AA"); 
      // Every EVEN part print BB 
       else 
      System.out.printf("BB"); 

      } 
     } 
    } 
} 
// Can use APPEND to string, but unable to use print 
// Line = "AA"/"BB" + Str 
+0

此外,我知道第二個for循環有somethi恩錯了,我已經嘗試了一堆東西,無法弄清楚什麼是錯的。 – user2999509

回答

4
for (line = i; line == 0; line--) 

看看該行。除非行等於0,否則該循環將永遠不會運行。

0

第一件事就是沒有必要在開始時定義i和行0,因爲如果您只鍵入int i, line, a;,java會爲您執行此操作。

對於你的外部循環更安全的方法是保持循環,如果我< =高度,因爲如果我出於某種原因超過身高它仍然會工作,我不認爲這是你想要的。

那裏在做什麼?如果你從不使用它,除非在每個循環中與它相等,否則這是毫無用處的。

要打印出正確的線條,我認爲使用StringBuffer創建線條是個好主意。以下是如何使用它:http://www.tutorialspoint.com/java/java_string_buffer.htm

對於這些錯誤,我認爲最好使用調試器並在掃描器上設置一個斷點,以便您可以逐步查看您的程序在做什麼以及它的變量是什麼。

你可以用eclipse等IDE輕鬆做到這一點。

0

你不需要第二個循環。爲了獲得類似的輸出:

AA 
AABB 
AABBAA 

看一看

public static void main(String[] args) { 

     Scanner userInputScanner = new Scanner(System.in); 
     int height = userInputScanner.nextInt(); 
     int i=0, line = 0, a; 
     String str=""; 
     // Start setting out the lines 
     for (i = 1; i <=height ; i++){ 
      // Every ODD part print AA 
       if (i%2 != 0){ 
        str+="AA"; 
      System.out.printf(str+"\n");} 
      // Every EVEN part print BB 
       else{ 
        str+="BB"; 
      System.out.printf(str+"\n"); 
       } 
     } 
    } 

OUTPUT:

​​
0

以下是你的問題解決方案:

IntStream.rangeClosed(1, MAX) 
      .forEach(i -> IntStream.rangeClosed(1, i) 
       .mapToObj(j -> j == i ? j % 2 == 0 ? "BB\n" : "AA\n" : j % 2 == 0 ? "BB" : "AA") 
        .forEach(System.out::print) 
      );