簡體   English   中英

循環模式

[英]Looping Pattern

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

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 
for (line = i; line == 0; line--)

看看那條線。 除非line等於0,否則此循環將永遠不會運行。

第一件事是,不必一開始就用0定義i和line,因為只要您輸入int i, line, a; java就會為您完成此操作int i, line, a;

對於您的外循環,一種更安全的方法是如果我<=身高,則繼續循環,因為如果我出於某種原因超過身高,它仍然可以工作,而且我認為這不是您想要的。

那里的變量在做什么? 如果您從不使用它,除非在每個循環中都等於它,這幾乎是沒有用的。

為了打印出正確的行,我認為使用StringBuffer創建行是一個好主意。 使用方法如下: http : //www.tutorialspoint.com/java/java_string_buffer.htm

對於這些錯誤,我認為最好使用調試器並在掃描儀上設置一個斷點,以便您可以逐步查看程序正在執行的操作及其變量的含義。

您可以使用eclipse之類的IDE輕松完成此操作。

您不需要第二個for循環。 要獲得如下輸出:

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

輸出:

5
AA
AABB
AABBAA
AABBAABB
AABBAABBAA

以下是針對您的問題的解決方案:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM