Java For循环在第二次之后不执行第一个命令
这是我的密码:Java For循环在第二次之后不执行第一个命令,java,loops,for-loop,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;
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);}
}
}
}
import java.util.Scanner;
公共类银行账户1
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(System.in);
煤焦拾取;
煤焦尺寸;
煤焦类型;
字符串名;
双倍成本=0.0;
int i;
对于(i=0;i将您的input.next()替换为input.nextLine()。这应该可以修复它。因为
input.next()
不使用换行符,这些字符会传递回循环,并且不允许输入值。您需要添加:
for (i = 0; i < 2; i++) {
// existing input.next() statements in here
...
input.nextLine();
}
(i=0;i<2;i++)的{
//此处的现有input.next()语句
...
input.nextLine();
}
在for
循环结束时进行修复。当您将扫描仪
与系统一起使用时。在
中,数据不会从系统读取。在
中,直到出现换行符(您点击了Enter)。因此,扫描仪缓冲区中的实际数据是:
Jake\nL\nV\nD\n
这里的关键是,D
在您按下enter键之前不会被发送到扫描仪的缓冲区。这就是为什么最后会出现\n
的原因。通常,当您调用input.next()
时,前一个错误的换行符会被占用。但是当您调用input.nextLine()时
for循环的第二次/第三次,它读取的是错误的尾随换行符:
here ----v
Jake\nL\nV\nD\n
所以你得到了一个空行,基本上是读取D
和\n
之间的所有内容,这算不了什么
每次都需要调用nextLine()
,并对结果字符串调用charAt(0)
。我遇到了类似的问题,这对我很有帮助。
在循环外部声明:
boolean ranOnce=false;
然后在循环内部声明
if(!ranOnce){ranOnce=true;String s=input.nextLine();}
每个输入都有什么不同。*调用?其中一个与另一个不同。我是否也需要将拾取更改为字符串类型?@kevinQu否,input.nextLine()。charAt(0)
是您需要做的全部。我使用图像中的输入对其进行了测试,没有发现任何异常。扫描仪。下一步
将自动修剪前导空格。