我正在编写一个Java程序,其中用户输入三个主题的标记,并根据它获得成绩,但在获取输入时出错。这是代码:
import java.util.*;
public class Prog {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a, b, c;
double avg;
String gr;
System.out.println("marks in Physics,Chemistry,Biology");
a = in .nextInt();
b = in .nextInt();
c = in .nextInt();
avg = (a + b + c) / 3;
if (avg > 80) {
gr = "distinction";
}
if (avg >= 60 && avg < 80) {
gr = "first division";
}
if (avg >= 45 && avg < 60) {
gr = "second division";
}
if (avg >= 40 && avg < 45) {
gr = "pass";
} else {
gr = "fail";
}
System.out.println(gr);
}
}
显示此错误:
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Unknown Source)
at java.util.Scanner.next(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at java.util.Scanner.nextInt(Unknown Source)
at Prog.main(Prog.java:9)
我做错了什么,我该如何解决?
答案 0 :(得分:4)
抛出:InputMismatchException - 如果下一个标记与 整数正则表达式,或超出范围
因此,如果用户输入错误的输入,您应该处理此异常。可能是这样的:
boolean inputOk = false;
do{
System.out.println("enter your first grade");
try {
a = in .nextInt();
inputOk = true;
} catch (InputMismatchException e) {
System.out.println("not a valid number");
in.nextLine(); // to reset the scanner
}
}while (!inputOk);
对其他变量执行相同操作。您甚至可以编写另一种方法来避免重复自己(DRY原则)
答案 1 :(得分:2)
这对我有用,我的猜测是你输入的输入不是整数 - 文本或带小数点的数字?
如果您需要能够处理带小数点的数字,我建议将变量a
,b
和c
设为double
或{ {1}}类型,然后使用float
或in.nextDouble()
。
如果您需要处理非数字输入,例如,如果有人输入“one”而不是“1”,那么您需要将输入值作为字符串读取in.nextFloat()
,然后将它们转换为整数(如果需要十进制数,则转换为浮点数或双精度数),如果不转换则捕获异常。作为如何做这样的事情的一个例子:
in.next()
最后,检查你的条件得分,我认为其中至少有一个是不正确的(提示:尝试你的代码在等级边界上的分数 - 例如40,45,60和80)。
答案 2 :(得分:-2)
输入代码适用于我,但你的if语句有缺陷。你需要更多的“其他”陈述:
if (avg > 80) {
gr = "distinction";
} else if (avg >= 60 && avg < 80) {
gr = "first division";
} else if (avg >= 45 && avg < 60) {
gr = "second division";
} else if (avg >= 40 && avg < 45) {
gr = "pass";
} else {
gr = "fail";
}