Java Scanner.nextInt();接受两个输入(我想)

Java Scanner.nextInt();接受两个输入(我想),java,Java,我正在尝试制作一个控制台程序,允许您查看所有学生及其信息的列表,并使用指定的条目搜索列表。 我目前正在做的部分,在那里你可以输入学生ID和匹配的结果将出现。 问题是每当我使用ID选项作为输入时,do while循环两次而不是一次。这很烦人,因为它会打印两次“CONSOLE>”消息 我的样本输入是“20180001” 控制台上更具体的输入/输出: Loop no: 0 CONSOLE>find FIND >id FIND ID >20180001 | ID: 20180001

我正在尝试制作一个控制台程序,允许您查看所有学生及其信息的列表,并使用指定的条目搜索列表。 我目前正在做的部分,在那里你可以输入学生ID和匹配的结果将出现。 问题是每当我使用ID选项作为输入时,do while循环两次而不是一次。这很烦人,因为它会打印两次“CONSOLE>”消息

我的样本输入是“20180001”

控制台上更具体的输入/输出:

Loop no: 0
CONSOLE>find
FIND >id
FIND ID >20180001
|   ID: 20180001    |    Name: Smith, John  |    Course: IT |    Year: 1st Year     |    Age: 18    |
Loop no: 1
CONSOLE>Loop no: 2
CONSOLE>
我的预期产出:

Loop no: 0
CONSOLE>find
FIND >id
FIND ID >20180001
|   ID: 20180001    |    Name: Smith, John  |    Course: IT |    Year: 1st Year     |    Age: 18    |
Loop no: 1
CONSOLE>
错误发生在以下位置:

do {
            System.out.println("Loop no: " + temp);
            System.out.print("CONSOLE>");
            input = Scanner.nextLine();
主类

public class Main {
    public static void main(String[] args) throws InterruptedException {
        String input = "";
        int input2 = 0;
        Student s0 = new Student();
        Student s1 = new Student();
        Student s2 = new Student();
        Student s3 = new Student();
        Student s4 = new Student();
        Scanner Scanner = new Scanner(System.in);
        int temp = 0;

        fillStudents(s0, s1, s2, s3, s4);

        do {
            System.out.println("Loop no: " + temp);
            System.out.print("CONSOLE>");
            input = Scanner.nextLine();
            if (input.toUpperCase().equals("LIST STUDENTS")) {
                Student201.listStudents(s0, s1, s2, s3, s4);
            } /* else System.out.println("ERROR MESSAGE: '" + input + "' is not recognized "
                    + "as a command."); */
            if (input.toUpperCase().equals("FIND")) {
                System.out.print("FIND >");
                input = Scanner.nextLine();
                if (input.toUpperCase().equals("ID")) {
                    System.out.print("FIND ID >");
                    input2 = Scanner.nextInt();
                    if(s0.getStudentID() == input2) {
                        System.out.println(s0);
                    } /* else System.out.println("CONSOLE MESSAGE: No results were found with the first name '"
                            + input + "'."); */
                    if(s1.getStudentID() == input2) {
                        System.out.println(s1);
                    }
                    if(s2.getStudentID() == input2) {
                        System.out.println(s2);
                    }
                    if(s3.getStudentID() == input2) {
                        System.out.println(s3);
                    }
                    if(s4.getStudentID() == input2) {
                        System.out.println(s4);
                    }
                }
                if (input.toUpperCase().equals("FIRST NAME")) { // If the user chooses FIRST NAME to find students
                    System.out.print("FIND FIRST NAME >");
                    input = Scanner.nextLine();
                    if(s0.getFirstName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s0);
                    } /* else System.out.println("CONSOLE MESSAGE: No results were found with the first name '"
                            + input + "'."); */
                    if(s1.getFirstName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s1);
                    }
                    if(s2.getFirstName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s2);
                    }
                    if(s3.getFirstName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s3);
                    }
                    if(s4.getFirstName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s4);
                    }
                }
                if (input.toUpperCase().equals("LAST NAME")) { // If the user chooses LAST NAME to find students
                    System.out.print("FIND LAST NAME >");
                    input = Scanner.nextLine();
                    if(s0.getLastName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s0);
                    } /* else System.out.println("CONSOLE MESSAGE: No results were found with the last name '"
                            + input + "'."); */
                    if(s1.getLastName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s1);
                    }
                    if(s2.getLastName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s2);
                    }
                    if(s3.getLastName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s3);
                    }
                    if(s4.getLastName().toUpperCase().equals(input.toUpperCase())) {
                        System.out.println(s4);
                    }
                }

            }
        temp++;
        }while (!input.equals("exit"));

    }

    public static void fillStudents(Student s0, Student s1, Student s2, Student s3, Student s4) throws InterruptedException {

        clear();
        System.out.println("Filling the information of Students...");
        TimeUnit.SECONDS.sleep(1);
        clear();

        s0.setLastName("Smith");
        s0.setFirstName("John");
        s0.setAge(18);
        s0.setCourse("IT");
        s0.setYear("1st Year");
        s0.setStudentID(20180001);

        s1.setLastName("Wallace");
        s1.setFirstName("Mark");
        s1.setAge(18);
        s1.setCourse("IT");
        s1.setYear("1st Year");
        s1.setStudentID(20180002);

        s2.setLastName("Reese");
        s2.setFirstName("Tony");
        s2.setAge(18);
        s2.setCourse("MA");
        s2.setYear("1st Year");
        s2.setStudentID(20180003);

        s3.setLastName("Johnson");
        s3.setFirstName("Liza");
        s3.setAge(18);
        s3.setCourse("BA");
        s3.setYear("1st Year");
        s3.setStudentID(20180004);

        s4.setLastName("Nguyen");
        s4.setFirstName("Kim");
        s4.setAge(17);
        s4.setCourse("ECE");
        s4.setYear("1st Year");
        s4.setStudentID(20180005);
    }

    public static void clear() {
        for(int x = 0; x<=100; x++) {
            System.out.println();
        }
    }

}
学生201班

package studentdirectory;

public class Student201{
    public static void listStudents(Student s0, Student s1, Student s2, Student s3, Student s4) {
        System.out.println(s0);
        System.out.println(s1);
        System.out.println(s2);
        System.out.println(s3);
        System.out.println(s4);
    }
}

最后,我想出了解决办法。 首先,问题不在于输入,而在于do while
循环
do while循环首先执行语句,然后检查
条件。
我所做的是创建了一个
无限循环
,然后接受输入,输入后我设置了
条件
,如果
输入
退出,它将中断
循环

诸如此类

while (true){       
        input = Scanner.nextLine();
        if(input.toUpperCase().equals("EXIT"))
        {
            break;
        }
        else
        {
          // Put the whole logic inside this
        }
您必须这样做,否则即使您的输入是
exit
,循环也会自动执行一次


希望这能有所帮助,我在“Scanner.nextLine();”之后加上“Scanner.nextLine();”,找到了修复方法。
这阻止它跳过input=Scanner.nextLine()

请在问题中直接填写相关代码。没有人应该/将不得不进入你的GitHub链接来找出你做错了什么。这个问题很可能是重复的。代码有200个lines@John_Sumitsu然后你应该尽可能地减少它,以显示你的问题。。发布200行可能会太宽。我建议你带上并阅读。请在出现错误的地方提供最少的代码。剪切代码不会使代码变得有意义,因为它与其他类连接。谢谢!下次我还会尝试在我的IDE上使用调试功能。如果此解决方案解决了您的问题,请不要忘记在accept answer上标记,这样它也会帮助将来的访问者。此方法会起作用,但是,如果代码执行,但用户不想执行任何操作,并键入“exit”,则此方法将不起作用。
while (true){       
        input = Scanner.nextLine();
        if(input.toUpperCase().equals("EXIT"))
        {
            break;
        }
        else
        {
          // Put the whole logic inside this
        }