循环模式

时间:2014-01-20 13:11:05

标签: java loops for-loop

我需要做一个循环模式,一个熟悉的练习,你输入高度并获得一定的模式。我需要生成的模式如下:

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 

4 个答案:

答案 0 :(得分:4)

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

看看那条线。除非line等于0,否则此循环将永远不会运行。

答案 1 :(得分:0)

首先,没有必要在开头用i定义i和line,因为如果只输入int i, line, a;,java会为你做这个。

对于你的外部循环更安全的方法是保持循环,如果我<=高度,因为如果我出于某种原因高于高度它仍然会工作,我不认为这是你想要的。

那里的变量是什么?如果你从不使用它,那就没用了,只不过它与我的每一个循环相等。

要打印出正确的线条,我认为使用StringBuffer创建线条是个好主意。以下是如何使用它:http://www.tutorialspoint.com/java/java_string_buffer.htm

对于这些错误,我认为最好使用调试器并在扫描仪上设置断点,以便逐步查看程序正在执行的操作及其变量。

您可以使用像eclipse这样的IDE轻松完成此操作。

答案 2 :(得分:0)

您不需要第二个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

答案 3 :(得分: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)
            );