如何使用arrayList对值进行排序和操作

How to use arrayList sort and manipulate the vlaue

通过使用 Java 11,我试图在 ArrayList 中找到平均值。我要开发的算法是((list/maximum 值内的值)*100)/列表长度)。我在 运行 程序时遇到数字格式 运行 时间错误。 java.lang.NumberFormatException 是我得到的错误。

import java.io.*;
import java.util.*;

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());
        StringTokenizer st = new StringTokenizer(br.readLine()," ");
        double[] grades = new double[N];
        
        for(int i = 0; i < N; i++){
            grades[i] = Integer.parseInt(st.nextToken());
        }
        
        double sum = 0;
        Arrays.sort(grades);
        
        for(int i = 0; i < grades.length; i++){
            sum += (grades[i]/grades[grades.length-1])*100;
        }
        System.out.println(sum/grades.length);
       
    }
}

enter image description here

我发现上面的代码有两个问题:

  1. br.readLine()int 的解析是抛出 NumberFormatException 的行,因为 br.readLine() 包含数字和空格(至少) .由于该行不是有效数字,因此解析失败。

    示例:

    • 用户在执行 br.readLine() 时输入以下内容:“1 2 3 4”
    • 下一条指令如下:int N = Integer.parseInt("1 2 3 4")
    • 正确的数字不应包含空格:“1234”
  2. 这并不是真正的错误,但是,您要求用户在 br.readLine 第二次出现时再次输入数字:new StringTokenizer(br.readLine()," ");

解决方案

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

// REMOVE NEXT LINE
// int N = Integer.parseInt(br.readLine());

StringTokenizer st = new StringTokenizer(br.readLine()," ");

// Read the number of tokens in the string
// The input "1 2 3 4" on the example above should return 4 tokens
int N = st.countTokens();

double[] grades = new double[N];