2016-04-07 11 views
0

私のプログラムがユーザー入力のプロンプトをスキップしている問題があります。関連するコードは以下の通りです:プログラムがユーザー入力を要求するのを待っていません

System.out.format("Purchase price is $" + "%.2f%n", sum); 
    System.out.println("Proceed to payment? (y/n) "); 
    String proceed = keyboard.nextLine(); 

    while(!proceed.equals("n") && (!proceed.equals("y"))) { 
     System.out.println("Invalid response. Try again."); 
     System.out.println("Proceed to payment? (y/n) "); 
     proceed = keyboard.nextLine(); 

    if (proceed.equals("n")) { 
     System.out.println("Come back next time, " + name + "."); 
     System.exit(0); 
    } 
    else if (proceed.equals("y")) {` 

出力がで一時停止する必要があります

購入価格$ x.00

が支払いに進んでいるのですか? (Y/N)

しかし、その代わりに出力:

購入価格は

が支払いに進ん$ x.00のですか? (y/n)

無効な応答です。再試行する。

お支払いに進む? (y/n)

誰にも最初のスキャナのプロンプトを無視する理由を教えていただけますか?

EDIT:コードは独立して動作しますが、問題はプログラム内のどこかにあります。私がそれを理解すると、私は報告するでしょう。

+0

何らかの理由で、keyboard.nextLine()の代わりにproceed = keyboard.next()を使用したときに問題が消えた – jdosha

答えて

3

whileループ条件でこのロジックは

while(!proceed.equals("n") && (!proceed.equals("y"))) { 

間違っているあなたはAND条件を使用してロジックを維持したいならば、外の支払いを移動

while(!proceed.equals("n") || (!proceed.equals("y"))) { 

でなければなりませんそのように働くことができる間に

例:

while (!proceed.equalsIgnoreCase("n") && (!proceed.equalsIgnoreCase("y"))) { 
    System.out.println("Invalid response. Try again...."); 
    proceed = keyboard.nextLine(); 
} 
if (proceed.equalsIgnoreCase("n")) { 
    System.out.println("Come back next time, " + name + "."); 
    System.exit(0); 

} else if (proceed.equalsIgnoreCase("y")) { 
    System.out.println("now we are going to pay, " + name + "." + sum); 
    System.exit(0); 
} 
+0

私はそうは思わない。それは|| "n"が "y"に等しくなく、そのテストに合格するため、proceedが "n"に等しくなることを意味します。 – jdosha

+0

ええ、私が言ったように、ORを実行すると、ユーザの入力がnの場合(つまり、右辺を満たしていれば左辺を満たさず、whileループは終了します)、whileループのポイントユーザーがyとn以外のものを入力するのを制限することです。 – jdosha

+0

@jdoshaあなたが気にする点を見ています...私のコードを更新して、私のPCで試してみました、あなたの要求に応じているかどうか確認してください –

関連する問題