我完成了一项简单的任务,创建了一个评分量表,可以为学生提供已提交值的字母等级。除了学生完成后,一切似乎都顺利进行 - 他们需要输入“E”退出程序...这是因为我收到此异常"Exception in thread "main" java.util.InputMismatchException"
而丢失的地方。我知道结果是我遗失的小事,但我不知道这里是我目前的代码:
public static void main(String[] args) {
int letterGrade;//The overall letter grade
boolean prompt = true;
while (prompt) {
//Prompt the student to input their data
System.out.print("Please enter your exam score, or press E to exit :");
@SuppressWarnings("resource")
Scanner keyboard = new Scanner(System.in);
letterGrade = keyboard.nextInt();
if ((letterGrade >= 90) & (letterGrade <= 100)) {
System.out.println("The letter grade is A");
} else if ((letterGrade >= 80) & (letterGrade <= 89)) {
System.out.println("The letter grade is B");
} else if ((letterGrade >= 70) & (letterGrade <= 79)) {
System.out.println("The letter grade is C");
} else if ((letterGrade >= 60) & (letterGrade <= 69)) {
System.out.println("The letter grade is D");
} else if ((letterGrade >= 0) & (letterGrade <= 59)) {
System.out.println("The letter grade is F");
} else {
System.out.println("Invalid input, try again.");
}
}
String firstChar = "e";
String secondChar = "E";
{
if ((firstChar == secondChar)) {
System.out.println("Thank you for using the grading system");
} else {
System.out.println("Thank you for using the grading system");
}
{
}
}
{
}
}
}
我错过了什么?我已经在这两个星期了?
答案 0 :(得分:1)
主要问题是将每个输入都作为int而不检查int是否因为&#34; e&#34;可以输入。
如果您希望用户输入"E" or "e"
,您应首先检查用户输入值是否为数字。您可以使用try{catch}
,但最好使用regex
。并在您的代码中比较不正确的字符串。您可以使用||
检查用户输入e或E,但.tolowercase或equalsIgnoreCase
很简单
public class NewClass {
public static void main(String[] args) {
String firstChar = "e";
String secondChar = "E";
boolean prompt = true;
while (prompt) {
//Prompt the student to input their data
System.out.print("Please enter your exam score, or press E to exit :");
@SuppressWarnings("resource")
Scanner keyboard = new Scanner(System.in);
String userinput = keyboard.next();
if(isNumeric(userinput)){
int letterGrade=Integer.parseInt(userinput);
if ((letterGrade >= 90) & (letterGrade <= 100)) {
System.out.println("The letter grade is A");
} else if ((letterGrade >= 80) & (letterGrade <= 89)) {
System.out.println("The letter grade is B");
} else if ((letterGrade >= 70) & (letterGrade <= 79)) {
System.out.println("The letter grade is C");
} else if ((letterGrade >= 60) & (letterGrade <= 69)) {
System.out.println("The letter grade is D");
} else if ((letterGrade >= 0) & (letterGrade <= 59)) {
System.out.println("The letter grade is F");
} else {
System.out.println("Invalid input, try again.");
}
}else if(userinput.equalsIgnoreCase(firstChar)){
System.out.println("Thank you for using the grading system");
System.exit(0);
}
}
}
public static boolean isNumeric(String str) {
return str.matches("-?\\d+(\\.\\d+)?");
}
}
如果您不允许使用方法equalsignorecase
,则可以使用or
运算符
else if(userinput.equals(firstChar)||userinput.equals(secondChar)){
System.out.println("Thank you for using the grading system");
System.exit(0);
}
并且如果您不允许使用regex
.replace isNumeric方法,请执行以下操作
尝试捕捉逻辑
public static boolean isNumeric(String str)
{
try
{
double d = Double.parseDouble(str);
}
catch(NumberFormatException ex)
{
return false;
}
return true;
}