【问题标题】:Small java program prints invisible newline?小java程序打印不可见的换行符?
【发布时间】: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


【解决方案1】:

小型java程序打印不可见的换行符?

在您的程序中,最后一个 System.out.println(""); 会在您的程序末尾产生一个额外的行,即 while(state)true 在结束,所以你要么评论打印声明,要么在结尾写上你的state=false

while(state) {    
    ... 
    System.out.println(""); 
}

【讨论】:

  • 我删除了,问题依旧。 @Soumya 达斯
  • 查看所有此类打印。为所有印刷品临时输入一个词,为每个印刷品输入一个不同的词。这样您就可以直接看到哪个打印语句对您最后一次不需要的打印负责。
  • 注释最后一个 System.out.println("");你不会得到额外的线 ABCDE ABCD ABC AB A
【解决方案2】:

如果输入为 0,则最内层循环不会运行。limit 将为 0,因此循环条件为假。至此,它将打印一个空行,继续添加1limit然后打印字符。

for (int i = 0; i < length; ++i) {
    for (int counter = 0; counter < limit; counter++) {
        char letter = (char)(counter + 'A');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多