2017-10-03 6 views
0

私は仕事をしています。私はやっています。これは、文字のピラミッドを出力する簡単なプログラムです。しかし、私は何か入力があっても指定されていないときに、プログラムが改行を印刷する理由を理解できません:https://i.imgur.com/gPs5oC5.png ピラミッドを逆さまに印刷すると、改行を追加する必要があります。改行はどこに印刷されていますか?小さいJavaプログラムは目に見えない改行を出力しますか?

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

'のSystem.out.println(メッセージ+ "\ n");' 'のSystem.out.println( "");' 'のSystem.out.println( "");' – Oleg

+0

のSystem.out .println(messageS + "\ n")は、プログラムがシャットダウンしているときにのみ使用されます。最初の印刷物を取り除くと、ピラミッドは印刷されません。私が2番目を削除しても、それは違いはありません。 @Oleg – Senethys

+1

ヒント:入力が0のときに最も内側のループはどうなりますか?あなたは本当にhttps://ericlippert.com/2014/03/05/how-to-debug-small-programs/ – Oleg

答えて

1

小さなJavaプログラムでは、目に見えない改行を出力しますか?

プログラム内で最後にSystem.out.println( "");は、プログラムの最後に余分な行を追加します。つまり、while(state)はの末尾にとなります。したがって、最後にstate=falseにコメントしてください。入力が0 limitは0であろうあれば

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

私はそれを削除したが、問題は解決しない。 @ Soumya Das – Senethys

+0

そのようなプリントをすべて見てください。すべての印刷物のための言葉を一時的に入力してください。これにより、最後に望ましくない印刷を担当する印刷ステートメントが直接表示されます。 – Zabuza

+0

コメント最後のSystem.out.println( "");余分な行はありません ABCDE ABCD ABC AB A –

0

最も内側のループは実行されず、したがって、ループ条件が偽です。この時点で、空白行が印刷され、1limit、次にの印刷文字が追加されます。

for (int i = 0; i < length; ++i) { 
    for (int counter = 0; counter < limit; counter++) { 
     char letter = (char)(counter + 'A'); 
関連する問題