我需要做一个循环模式,一个熟悉的练习,你输入高度并获得一定的模式。我需要生成的模式如下:
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 :(得分: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)
以下是针对您的问题的java-8解决方案:
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)
);