“线程中的异常”;“主要”;使用nextFloat()的java.util.InputMismatchException
因此,我编写了一个小程序来计算学生最好成绩的平均值,当我运行它时,我在线程“main”java.util.InputMismatchException中得到了这个错误异常 我看到一篇帖子,上面说它使用nextLine,然后使用parseInt(在本例中是parseFloat),但我不允许在这里使用它,所以我正在寻找关于我可以做什么的另一种意见 代码: 导入java.util.Scanner 公共级G2a{“线程中的异常”;“主要”;使用nextFloat()的java.util.InputMismatchException,java,Java,因此,我编写了一个小程序来计算学生最好成绩的平均值,当我运行它时,我在线程“main”java.util.InputMismatchException中得到了这个错误异常 我看到一篇帖子,上面说它使用nextLine,然后使用parseInt(在本例中是parseFloat),但我不允许在这里使用它,所以我正在寻找关于我可以做什么的另一种意见 代码: 导入java.util.Scanner 公共级G2a{ static float average(float[] vals) { //Return
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));
}
进程结束时退出代码为1我猜您在输入中使用了如下内容:
1.5
请改用以下方法:
1,5
键入浮点数。如果您使用的是点,解决方案可能是精确计算扫描仪中使用的区域设置。请尝试将main()
方法中的第一行从:
Scanner in = new Scanner(System.in);
致:
这一行将精确表示您在键入十进制数时要使用的符号。看,它是如何改变输入的读取方式的(现在点是可以的,而逗号不是):
我猜您在输入中使用了如下内容:
1.5
请改用以下方法:
1,5
键入浮点数。如果您使用的是点,解决方案可能是精确计算扫描仪中使用的区域设置。请尝试将main()
方法中的第一行从:
Scanner in = new Scanner(System.in);
致:
这一行将精确表示您在键入十进制数时要使用的符号。看,它是如何改变输入的读取方式的(现在点是可以的,而逗号不是):
我认为你的错误是因为你像
2.6
3.6
等等
它是一个浮点数,输入应该是逗号,而不是点
2,6
3,6
etc..
我测试了它,输入工作正常:)
//编辑
正如Dukeling提到的复制,如果您希望它是逗号,您需要使用
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
更多信息请点击这里-->
我认为您的错误是因为您输入了
2.6
3.6
等等
它是一个浮点数,输入应该是逗号,而不是点
2,6
3,6
etc..
我测试了它,输入工作正常:)
//编辑
正如Dukeling提到的复制,如果您希望它是逗号,您需要使用
Scanner scanner = new Scanner(System.in).useLocale(Locale.US);
更多信息请点击这里-->
似乎在测试代码时,我输入了76
和100
中的百分比,没有错误。您的问题是nextInt
方法只读取一个整数,而不是数组。Scanner
正在将逗号作为字符串的一部分进行解析,因此输入分数的百分比,您应该不会有问题 当我测试你的代码时,我似乎输入了76
和100
中的百分比,没有错误。你的问题是nextInt
方法只读取一个整数,而不是数组。Scanner
正在将逗号作为字符串的一部分进行解析,因此输入分数的百分比,你应该可以 你给你的程序提供了什么输入?准确完整的错误信息是什么?你可能想看一下-这里有很多代码不需要重现你遇到的这个特定问题。你能告诉我你在执行这个程序时使用的是什么IDE吗?可能是你给你的程序提供的输入的一个副本?有什么问题准确完整的错误信息?你可能想看一看-这里有很多代码不需要重现你遇到的这个特定问题。你能告诉我你在执行这个程序时使用的IDE吗?可能是相同错误的副本。给我你所有的输入。这里没有相同错误的方法把你所有的钱都给我input@Rui请看一看我对我的答案所做的编辑。这可能对你有帮助。@Rui很高兴我能帮助你!@Rui请看一看我对我的答案所做的编辑。这可能对你有帮助。@Rui很高兴我能帮助你!