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 循环,它询问名称、大小、类型和拾取。第一次运行时,它要求输入所有字段,但第二次,名称字段由于某种原因不允许我输入姓名,它打印“你叫什么名字?” 但它不允许我输入名字......?有人能告诉我为什么吗?谢谢。

这就是它的样子: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

当您使用Scannerwith 时System.in,直到换行符才会读取数据System.in(您已按 Enter 键)。所以你在扫描仪缓冲区中实际拥有的是:

Jake\nL\nV\nD\n

这里的关键是在D你按下回车键之前它不会被发送到扫描仪的缓冲区。这就是为什么\n在最后。通常,当您调用input.next()时,先前的流浪换行符会被吞噬。但是,当您input.nextLine()在 for 循环中第二次/第三次调用时,它正在读取那个流浪的尾随换行符:

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

所以你得到一个空行,基本上读取D和之间的所有内容\n,这什么都没有。

您需要nextLine()每次调用并调用charAt(0)生成的字符串。

于 2012-10-17T01:04:55.630 回答
2

用 input.nextLine() 替换你的 input.next()。那应该解决它。

于 2012-10-17T01:04:27.727 回答
0

我有一个类似的问题,这对我有帮助。在循环外声明:

boolean ranOnce=false;

然后在循环内声明这个

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