“线程中的异常”;“主要”;使用nextFloat()的java.util.InputMismatchException

“线程中的异常”;“主要”;使用nextFloat()的java.util.InputMismatchException,java,Java,因此,我编写了一个小程序来计算学生最好成绩的平均值,当我运行它时,我在线程“main”java.util.InputMismatchException中得到了这个错误异常 我看到一篇帖子,上面说它使用nextLine,然后使用parseInt(在本例中是parseFloat),但我不允许在这里使用它,所以我正在寻找关于我可以做什么的另一种意见 代码: 导入java.util.Scanner 公共级G2a{ static float average(float[] vals) { //Return

因此,我编写了一个小程序来计算学生最好成绩的平均值,当我运行它时,我在线程“main”java.util.InputMismatchException中得到了这个错误异常

我看到一篇帖子,上面说它使用nextLine,然后使用parseInt(在本例中是parseFloat),但我不允许在这里使用它,所以我正在寻找关于我可以做什么的另一种意见

代码:

导入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));
}

进程结束时退出代码为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很高兴我能帮助你!