2016-09-26 17 views
0

私はJavaを使い慣れていないので、プログラミングスキルが悪いとすみませます。私のプログラムは、I/Oバッファをシミュレートするためにキューを使用する必要があります。ユーザー入力の行を継続的に受け入れます。ユーザーがO(Oh)を挿入すると、入力された最初の行が返されます。 Xが入力された場合は、それを終了する必要があります。私のdo-whileループはif文を実行していないようです

これが私のプログラムである:

public static void main(String[] args) { 

    Queue<String> queue = new LinkedList<String>(); 

    Scanner input = new Scanner(System.in); 
    String check = input.nextLine(); 

do { 

    queue.add(check); 

    if(check.equals("O")) { 

    if(queue.peek() != null){ 
     String remove = queue.remove(); 
     System.out.println("Data: " + remove); 
     } 

    else if(queue.peek() == null) { 
     System.out.println("Buffer empty");   
     } 
    } 

} while(!"X".equals(check)) ; 

予想される入力 - 出力は次のようになります。

line1 
line2 
O 
Data: line1 
line3 
line4 
O 
Data: line2 
O 
Data: line3 
line5 
O 
Data: line4 
O 
Data: line5 
O 
Buffer empty 
X 

それは入力を求めて停止したことがないよう私のプログラムは、私のif文を実行していないようです一度終了せず、Xはユーザによって与えられる。

わかりやすいものが見つからない場合は申し訳ありません。そうでない場合は、常になります確認し、

check = input.nextLine(); 

あなたは次のinputlineを読んで、この方法:

+4

「入力を求めることは決してありません」 - 不可能です。入力部分は**ループの前**です。入力が一度だけ要求され、入力が 'X'と異なる場合は無限ループになります。おそらく、古いバージョンのコードを投稿したでしょうか? – BackSlash

答えて

1

あなたのinput.nextLine()はループの外側にあるので、キューに入力を追加するとすべてのループ反復で呼び出されるため、一度しか呼び出されません。それが起こっている理由です。

String check; 
do { 
    check = input.nextLine(); 
    queue.add(check); 
+0

ありがとう、これは本当に助けになった! –

1

問題は、もし条件の後、あなたは行を追加する必要があり、最後にもう一度入力を読む必要があります最初に入力したものと同じものが入力されます。それはループの最後で再び呼び出されるべきであるのに対し、まず

+1

ありがとう、本当に助けてくれました! –

1

String check = input.nextLine(); 

は一度だけ呼ばれます。したがって更新されません。

+0

多くの意味がある説明をありがとうございました。どのように私は再び呼び出すだろうか?単純なput:String check = input.nextLine();最後に –

+0

ナー、チェック= input.nextLine();別の文字列を宣言していないからです。 –

関連する問題