在此代码中,用户输入一个测试标记,并且应该打印出成绩并询问用户是否想要输入另一个标记,但是,我的问题是它打印出这个位两次我不喜欢不知道为什么?
import java.util.Scanner;
public class ExamGrades {
public static void main(String[] args) {
int mark;
String answer;
Scanner scan = new Scanner(System.in);
System.out.println("Enter student mark: ");
mark = scan.nextInt();
while (mark >= 0) {
if (mark < 40) {
System.out.println("FAILED.");
} else if (40 <= mark && mark <= 49) {
System.out.println("3rd");
} else if (50 <= mark && mark <= 59) {
System.out.println("2/2");
} else if (60 <= mark && mark <= 69) {
System.out.println("2/1");
} else if (mark >= 70 && mark <= 100) {
System.out.println("1st");
} else if (mark > 100) {
System.out.println("Invalid mark");
}
System.out.println("Enter another mark? Yes or No: ");
answer = scan.nextLine();
if (answer.equalsIgnoreCase("yes")) {
System.out.println("Enter student mark: ");
mark = scan.nextInt();
} else if (answer.equalsIgnoreCase("no")) {
mark = -1;
System.out.println("Thank you.");
}
}
scan.close();
}
}
感谢您提供任何帮助。
答案 0 :(得分:2)
原因是当您输入标记时,按下56&lt; enter&gt;。您的API nextInt只读取56并离开输入由nextLine api消耗的内容。
为了避免这种情况,请在下面的sysout之前:
System.out.println("Enter another mark? Yes or No: ");
输入以下行:
scan.nextLine();
这样你的&lt; enter&gt;被这个api消耗掉,你可以成功地向前阅读用户输入是/否。