所以我正在编写一个小程序来做一个学生最好成绩的平均值,当我运行它时,我得到这个错误在线程“main”中的异常java.util.InputMismatchException。
我看到一个帖子,据说使用了nextLine,然后使用parseInt(在这种情况下是parseFloat),但是我不允许在这里使用它,所以我正在寻找另外一个我能做什么的意见
代码:
import java.util.Scanner;
公共班级G2a {
static float average(float[] vals) { //Returns the average of an array;
float avg = 0F;
for (int i = 0; i < vals.length; i++)
avg += vals[i];
return avg /= vals.length;
}
static int indexOfMin(float[] vals) { // Returns the index of the minimum;
int idx = -1;
for (int i = 0; i < vals.length ; i++) {
float v = vals[i];
if(v>=0 && (idx==-1 || v<vals[idx])) idx=i;
}
return idx;
}
static float[] removeMins(int n, float[] vals) { //Removes n minimums of the array and returns a new array without them;
while (n > 0) {
int a = indexOfMin(vals);
vals[a] = -1;
--n;
}
float[] res = new float[vals.length - n];
int b = 0;
for (int i = 0; i < vals.length; i++)
if (vals[i] != -1) {
res[b] = vals[i];
++b;
}
return res;
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Number of Grades ? ");
float[] vals= new float[in.nextInt()];
for (int i = 0; i < vals.length ; i++) {
System.out.println("Grade "+ (i+1) +" ? ");
vals[i]=in.nextFloat(); //Line of the Error;
}
System.out.println("Number of Grades to the Average ? ");
int n = in.nextInt();
float [] best = removeMins(n,vals);
System.out.print("Best " +n+ " Grades: ");
for (int i = 0; i < best.length ; i++)
System.out.print(best[i]);
System.out.println("");
System.out.println("Average of the " +n+ " Best Grades = "+average(best));
}
}
修改
我正在使用Intellij
输入和完整错误消息:
等级数?
5
1年级?
7.3
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Scanner.java:860)
at java.base/java.util.Scanner.next(Scanner.java:1497)
at java.base/java.util.Scanner.nextFloat(Scanner.java:2399)
at G2a.main(G2a.java:42)
使用退出代码1完成处理
答案 0 :(得分:0)
我猜你在输入中使用这样的东西:
1.5
请改用以下内容:
1,5
键入浮点数。如果您使用点,则解决方案可能是Scanner
中使用的区域设置。尝试更改main()
方法中的第一行:
Scanner in = new Scanner(System.in);
为:
Scanner in = new Scanner(System.in).useLocale(Locale.US);
此行将精确显示您在键入十进制数时要使用的符号。看,它是如何改变读取输入的方式(现在点是可以的,当逗号不是时):
Number of Grades ?
3
Grade 1 ?
1.3
Grade 2 ?
1,4
Exception in thread "main" java.util.InputMismatchException
at java.base/java.util.Scanner.throwFor(Unknown Source)
at java.base/java.util.Scanner.next(Unknown Source)
at java.base/java.util.Scanner.nextFloat(Unknown Source)
at G2a.main(G2a.java:44)
答案 1 :(得分:0)
我认为您的错误是因为您提供了
之类的输入2.6
3.6
等。
它是一个浮点数,输入应该是逗号而不是点的。所以
2,6
3,6
etc..
我测试了它,输入工作正常:)
//编辑
正如Dukeling提到重复一样,如果你想要它是逗号,你需要使用
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
此处有更多信息 - &gt; Scanner double value - InputMismatchException
答案 2 :(得分:0)
似乎在我测试您的代码时,我输入了76
和100
中的百分比,没有任何错误。您的问题是方法nextInt
只读取一个整数,而不是数组。 Scanner
正在将逗号分析为字符串的一部分,因此请输入成绩的百分比,您应该没问题。