For循环第二次执行后不执行第一个命令

时间:2012-10-17 00:58:03

标签: java loops for-loop

这是我的代码:

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

这就是它的样子:http://i.stack.imgur.com/eb1BA.jpg

4 个答案:

答案 0 :(得分:3)

由于事实

input.next()

不使用换行符,这些传递将传递回循环并且不允许输入值。您需要添加:

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

   input.nextLine();
}

for循环结束时修复。

答案 1 :(得分:3)

ScannerSystem.in一起使用时,在换行符(您点击 Enter )之前,不会从System.in读取数据。那么你在Scanner缓冲区中实际拥有的是:

Jake\nL\nV\nD\n

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

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

所以你得到一个空白行,基本上是在D\n之间阅读所有内容,这一切都没有。

您每次都需要致电nextLine(),并在结果字符串上调用charAt(0)

答案 2 :(得分:2)

用input.nextLine()&替换你的input.next()&#39; s。那应该解决它。

答案 3 :(得分:0)

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

boolean ranOnce=false;

然后在循环内声明这个

if(!ranOnce){ranOnce=true;String s=input.nextLine();}