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