2012-10-17 121 views
4

这里是我的代码:For循环第二次以后不执行的第一个命令

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);} 


    } 

} 

} 

我有一个在我的代码回路,并且它要求的名称,大小,类型和皮卡。第一次运行时,它要求输入所有字段,但是第二次,名称字段不允许我输入名称,它会打印“你叫什么名字?”但它不让我输入名字......?有人可以告诉我为什么吗? 谢谢。

这是什么样子:http://i.stack.imgur.com/eb1BA.jpg

+0

每个输入*呼叫有什么不同?其中一个不像另一个。 – Dave

回答

3

由于事实

input.next() 

不消耗换行符,这些获得通过传回给你的循环,不会允许输入的值。您需要添加:

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

    input.nextLine(); 
} 

for循环修复结束。

+0

感谢您的帮助! – PhoonOne

+0

我用图像中的输入测试了它,并没有得到任何异常。 'Scanner.next'会自动裁剪前导空格。 – Reimeus

2

更换你input.next()'s的input.nextLine()的。这应该解决它。

3

当您使用ScannerSystem.in,数据不会从System.in一直读到一个换行符(你已经打输入)。所以,你实际上有扫描仪的缓存是什么:

Jake\nL\nV\nD\n 

这里的关键是,D,直到你按下输入不会发送到扫描仪的缓冲区。这就是为什么最后有\n。通常,当你打电话给input.next()时,以前的杂散换行符会被吞噬。但是,当你调用input.nextLine()周围的for循环的第二/第三次,它的读取流浪结尾的新行:

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

所以,你得到一个空行,基本上是看完D\n之间的一切,这是什么。

你需要调用nextLine()每次在产生的字符串调用charAt(0)

+0

感谢您的帮助! – PhoonOne

+0

我是否需要更改取为String类型呢? – PhoonOne

+0

@kevinQu没有,'input.nextLine()的charAt(0)'是所有你需要做的 –

相关问题