4

これが私のコードです:

import java.util.Scanner;

public class BankAccount1
{
public static void main(String[] args)
{
    Scanner input = new Scanner(System.in);

    char pickup;
    char size;
    char type;
    String name;

    double cost=0.0;
    int i;


    for (i=0; i<2; i++)
    {
    System.out.println("What is your name?");
    name = input.nextLine();

    System.out.println("size of pizza: ");
    size =  input.next().charAt(0);

    System.out.println("type of pizza: ");
    type = input.next().charAt(0);

    System.out.println("pick up or delivery?");
    pickup = input.next().charAt(0);


    if(size == 'S' || type == 'V') {cost = 10.0;}
    else if(size == 'M' || type == 'V') {cost = 12.25;}
    else if(size == 'L' || type == 'V') {cost = 14.50;}
    else if(size == 'S' || type == 'C') {cost = 7.0;}
    else if(size == 'M' || type == 'C') {cost = 8.0;}
    else if(size == 'L' || type == 'C') {cost = 9.0;}


    if(pickup == 'D'){
    cost=cost+1.50;
    System.out.println("Name: "+name+". Your cost is: "+cost);}
    else { 
    System.out.println("Name: "+name+". Your cost is: "+cost);}


    } 

}

}

コードにforループがあり、名前、サイズ、タイプ、ピックアップを尋ねられます。初めて実行すると、すべてのフィールドに入力するように求められますが、2回目は、名前フィールドで何らかの理由で名前を入力できず、「あなたの名前は何ですか?」と出力されます。でも名前を入れられない…?誰かが理由を教えてもらえますか?ありがとう。

これはそれがどのように見えるかです:http://i.stack.imgur.com/eb1BA.jpg

4

4 に答える 4

3

事実によるもの

input.next()

改行文字を消費しません。これらはループに戻され、値を入力できません。追加する必要があります:

for (i = 0; i < 2; i++) {
   // existing input.next() statements in here
  ...

   input.nextLine();
}

for修正するループの終わりに。

于 2012-10-17T01:04:45.447 に答える
3

withを使用するScannerSystem.in、データはSystem.in改行まで読み取られません(Enterキーを押します)。したがって、スキャナーのバッファーに実際にあるのは次のとおりです。

Jake\nL\nV\nD\n

ここで重要なのは、DEnterキーを押すまでスキャナーのバッファーに送信されないことです。それが\n最後にある理由です。通常、あなたが電話をしているときinput.next()、その前の漂遊改行はぐちゃぐちゃになります。しかしinput.nextLine()、forループの周りで2回目または3回目を呼び出すと、その迷いの末尾の改行が読み取られます。

    here ----v
Jake\nL\nV\nD\n

したがって、空白行が表示され、基本的にDとの間のすべてが読み取られますが\n、これは何もありません。

nextLine()毎回呼び出しcharAt(0)て、結果の文字列を呼び出す必要があります。

于 2012-10-17T01:04:55.630 に答える
2

input.next()をinput.nextLine()に置き換えます。それはそれを修正する必要があります。

于 2012-10-17T01:04:27.727 に答える
0

私も同様の問題を抱えていましたが、これは私を助けてくれました。これをループの外で宣言します。

boolean ranOnce=false;

次に、ループ内でこれを宣言します

if(!ranOnce){ranOnce=true;String s=input.nextLine();}
于 2018-04-17T21:12:30.443 に答える