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)
是您需要做的全部。我使用图像中的输入对其进行了测试,没有发现任何异常。
扫描仪。下一步
将自动修剪前导空格。