Java 当代码从循环中重复时,用户输入选项将丢失

Java 当代码从循环中重复时,用户输入选项将丢失,java,Java,由于我不知道的原因,当我的代码循环回开始时,一些字符串输入选项丢失。。这是我的问题 Enter student's name: Bob Enter student's subject: Maths Enter student's number: 12345 Enter level student last completed (0-3): 0 Would you like to enter data for another student? Yes/No Yes Enter stude

由于我不知道的原因,当我的代码循环回开始时,一些字符串输入选项丢失。。这是我的问题

Enter student's name: 
Bob
Enter student's subject: 
Maths
Enter student's number: 
12345
Enter level student last completed (0-3): 
0
Would you like to enter data for another student? Yes/No 
Yes
Enter student's name: 
Enter student's subject: 
English        
Enter student's number: 
55677
Enter level student last completed (0-3): 
0
正如您所看到的,当循环再次循环以允许用户再次输入详细信息时,它只是打印出来

Enter student's name: 
Enter student's subject: 
English        
Enter student's number: 
55677
Enter level student last completed (0-3): 
0
同时,只允许输入科目而不允许输入姓名,跳过学生姓名的输入选项。但之后的字段正常工作

这是我的密码

    import java.util.*;

public class StudentData 
{
    public static void main(String[] args) 
    {
        Scanner in = new Scanner(System.in);
        ArrayList<Student> studentList = new ArrayList<Student>();
        String yesNo; // = "true";
        int level = 0;

        do
        {
            int averageResult = 0;
            int result1 = 0;
            int result2 = 0;
            int result3 = 0;

//          in.next();
            System.out.println("Enter student's name: ");
            String name = in.nextLine();
            System.out.println("Enter student's subject: ");
            String subject = in.nextLine();
            System.out.println("Enter student's number: "); 
            int number = in.nextInt();

            do
            {
                System.out.println("Enter level student last completed (0-3): "); 
                 level = in.nextInt();
                }
            while (level > 3 || level < 0);
            if (level > 0)
            {
                if (level == 3)
                {
                System.out.println("Enter result for level 3: "); 
                result3 = in.nextInt();
                System.out.println("Enter result for level 2: "); 
                result2 = in.nextInt();             
                System.out.println("Enter result for level 1: "); 
                result1 = in.nextInt();
                }
            else if (level == 2)
            {
                System.out.println("Enter result for level 2: "); 
                result2 = in.nextInt();
                System.out.println("Enter result for level 1: "); 
                result1 = in.nextInt(); 
                }   
            else if (level == 1)    
            {
                System.out.println("Enter result for level 1: "); 
                result1 = in.nextInt();
                }

//          averageResult = 0;
            averageResult= ((result1 + result2 + result3) / level); 
            }
//          System.out.println(averageResult); 
            else
            {

            }
            Student s = new Student(name,subject,number,level,result1,result2,result3,averageResult);   
            studentList.add(s);



            do
            {   
                System.out.println("Would you like to enter data for another student? Yes/No ");
                yesNo = in.next();
                }
            while (!yesNo.equalsIgnoreCase("YES") && !yesNo.equalsIgnoreCase("NO"));
            }   
        while (yesNo.equalsIgnoreCase("YES"));




        for(int i = 0; i < studentList.size(); i++)
        {
            System.out.println("Student's name: "+studentList.get(i).getName());
            System.out.println("Student's subject: "+ studentList.get(i).getSubject());
            System.out.println("Student number: "+studentList.get(i).getNumber());
            System.out.println("Level which student has completed: "+studentList.get(i).getLevel());
            System.out.println("Result for level 1:"+studentList.get(i).getResults1());
            System.out.println("Result for level 2:"+studentList.get(i).getResults2());
            System.out.println("Result for level 3:"+studentList.get(i).getResults3());
            System.out.println("Average result for all completed levels: "+studentList.get(i).getAverageResults());
            System.out.println();
            }
        }
    }
import java.util.*;
公共班级学生数据
{
公共静态void main(字符串[]args)
{
扫描仪输入=新扫描仪(系统输入);
ArrayList studentList=新建ArrayList();
字符串yesNo;//=“true”;
智力水平=0;
做
{
int averageResult=0;
int result1=0;
int result2=0;
int result3=0;
//in.next();
System.out.println(“输入学生姓名:”);
字符串名称=in.nextLine();
System.out.println(“输入学生的主题:”);
字符串subject=in.nextLine();
System.out.println(“输入学生编号:”);
int number=in.nextInt();
做
{
System.out.println(“输入上次完成的水平学生(0-3):”;
级别=in.nextInt();
}
而(水平>3 | |水平<0);
如果(级别>0)
{
如果(级别==3)
{
System.out.println(“输入级别3的结果:”);
result3=in.nextInt();
System.out.println(“输入级别2的结果:”);
result2=in.nextInt();
System.out.println(“输入级别1的结果:”);
result1=in.nextInt();
}
否则如果(级别==2)
{
System.out.println(“输入级别2的结果:”);
result2=in.nextInt();
System.out.println(“输入级别1的结果:”);
result1=in.nextInt();
}   
否则,如果(级别==1)
{
System.out.println(“输入级别1的结果:”);
result1=in.nextInt();
}
//平均结果=0;
平均结果=((结果1+结果2+结果3)/level);
}
//System.out.println(averageResult);
其他的
{
}
学生s=新学生(姓名、科目、编号、级别、结果1、结果2、结果3、平均结果);
学生名单。添加;
做
{   
System.out.println(“您想为另一个学生输入数据吗?是/否”);
yesNo=in.next();
}
而(!yesNo.equalsIgnoreCase(“YES”)和&!yesNo.equalsIgnoreCase(“NO”);
}   
而(是)(是)否(是);;
对于(int i=0;i
学生姓名循环后,如何允许输入?
谢谢

我以前也遇到过同样的问题。我想这是scanner的nextLine()方法的问题。
解决此问题的一个简单方法是在遇到问题时使用nextLine()方法进行复制,或者可以使用另一个对象从用户获取输入

与其使用nextLine()来获取名称和主题,不如使用next()来解决您的问题

执行以下更改,它将按预期工作

Scanner in; //do not create Scanner instance here
ArrayList<Student> studentList = new ArrayList<Student>();
String yesNo; // = "true";
int level = 0;

do
{
    in = new Scanner(System.in);//instead create here
Scanner-in//不要在此处创建扫描仪实例
ArrayList studentList=新建ArrayList();
字符串是否;//=“真实”;
智力水平=0;
做
{
in=新扫描仪(System.in);//改为在此处创建