2016-06-21 6 views
0

最初のプロセスがループに入るときに、なぜユーザー入力文字列が最初に停止して待たずに、代わりにスペースを印刷して入力しますか?ループの2回目に停止し、ユーザーが何かを入力するのを待ちます。 ハッカーのランク30 Days of code> 6日目の問題。最初のプロセスがループに入るとき、なぜユーザーの入力文字列が最初に停止して待機しないのですか?

public static void main(String[] args) { 
    /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */ 
    Scanner stdin = new Scanner(System.in); 

    int input; 
    input = stdin.nextInt(); 

    while(input-- >= 0){ 
     String sentence = stdin.nextLine(); 
     char[] CharArray = sentence.toCharArray(); 
     for(int i=0; i < sentence.length() ; i=i+2){ 
      System.out.print(CharArray[i]); 
     } 
     System.out.print(" "); 
     for(int i=1; i < sentence.length() ; i=i+2){ 
      System.out.print(CharArray[i]); 
     } 

     System.out.println(); 
    } 

    stdin.close(); 
} 

答えて

0

数値を入力するときには、ENTERキーを押して入力を入力します。だから、次の行には、数を消費しますが、それはないをキャリッジリターンを消費します:

input = stdin.nextInt(); 

代わりに、そのキャリッジリターンは、このラインにより、ループの最初の繰り返しで消費されています

String sentence = stdin.nextLine(); 

つまり、ループの最初の反復では、入力したことが知らされていないため、入力を求めるプロンプトが表示されませんでした。これを避けたい場合は、Scanner.nextLine()への明示的な呼び出しを追加することができます。

input = stdin.nextInt(); 
stdin.nextLine(); 
0

ので、あなたは、単にすることができ、あなたは数と入力し、Enterキーを押します場合は、nextInt()は、入力した整数を読み取りますが、あなたがループに入る前に、それを空にする必要があるので、「\ n」の文字は、バッファ内に残っていますループに入る前にstdin.nextLine()を入力してください

0

初めて、2回スキャンしています。

入力= stdin.nextInt();

それはあなたの入力を待つでしょう。あなたは価値があると前進します。再び

文字列= stdin.nextLine();

入力(またはキャリッジリターン)し、スペースで印刷します。この後

それが適切に

ソリューションに動作します:

使用stdin.nextLineを();入力の直後= stdin.nextInt();

0

あなたはもう一つ追加する必要があります - いくつかの変数でそれを収集せず

input = stdin.nextInt(); 

stdin.nextLine(); 

を。これは、あなたの整数を下の行に入力した直後に現れる改行文字を消費します。 -

input = stdin.nextInt();

関連する問題