【发布时间】:2017-10-03 09:06:43
【问题描述】:
我正在做一个任务,我已经完成了。这是一个打印字符金字塔的简单程序。但是,我无法弄清楚为什么程序会打印一个换行符,而我从来没有用一些输入来指定它,即使它的意思是:https://i.imgur.com/gPs5oC5.png 为什么在颠倒打印金字塔时必须有一个额外的换行符?换行符打印在哪里?
import java.util.Scanner;
public class Test23 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean state = true;
String messageL = "Length: ";
String messageD = "Position: ";
String messageS = "Shutdown!";
while(state) {
int limit = 0;
int degree;
System.out.print(messageL);
int length = input.nextInt();
while ((length < 1 && length == -1) || length > 26) {
if (length == -1 ) {
System.out.println(messageS + "\n");
state = false;
break;
} else {
System.out.print(messageL);
length = input.nextInt();
}
}
if (!state)
break;
System.out.print(messageD);
degree = input.nextInt();
while((degree > 1) || (degree < 0)) {
System.out.print(messageD);
degree = input.nextInt();
}
if (degree == 0)
//No newline is needed here for some reason.
length++;
else if (degree == 1)
limit = length;
//New line here for the pyramids to print symmetrically.
//System.out.println("");
for (int i = 0; i < length; ++i) {
for (int counter = 0; counter < limit; counter++) {
char letter = (char)(counter + 'A');
System.out.print(letter);
}
if (degree == 0)
limit++;
else if (degree == 1)
limit--;
System.out.println("");
}
System.out.println("");
}
}
}
【问题讨论】:
-
System.out.println(messageS + "\n");System.out.println("");System.out.println(""); -
System.out.println(messageS + "\n") 仅在程序关闭时使用。如果我删除第一个打印,它不会打印金字塔。如果我删除第二个,它没有任何区别。 @Oleg
-
提示:当输入为 0 时,最内层循环会发生什么?你真的应该阅读ericlippert.com/2014/03/05/how-to-debug-small-programs
-
我现在看到了问题,最里面的循环第一次没有运行,所以它打印出一个换行符?无论如何,谢谢你的文章。 @Oleg
-
是的,完全正确。请学习如何调试和解决这些问题。如果您打算成为一名程序员,这是您必须学习的技能。
标签: java java.util.scanner newline user-input system.out