这是我的代码:
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字段不允许我输入名称由于某种原因,它打印出“你的名字是什么?”但它不让我输入名字......?谁能告诉我为什么? 感谢。
答案 0 :(得分:3)
由于事实
input.next()
不使用换行符,这些传递将传递回循环并且不允许输入值。您需要添加:
for (i = 0; i < 2; i++) {
// existing input.next() statements in here
...
input.nextLine();
}
在for
循环结束时修复。
答案 1 :(得分:3)
当Scanner
与System.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();}