如何使用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
我发现上面的代码有两个问题:
br.readLine()
到 int
的解析是抛出 NumberFormatException
的行,因为 br.readLine()
包含数字和空格(至少) .由于该行不是有效数字,因此解析失败。
示例:
- 用户在执行
br.readLine()
时输入以下内容:“1 2 3 4”
- 下一条指令如下:
int N = Integer.parseInt("1 2 3 4")
- 正确的数字不应包含空格:“1234”
这并不是真正的错误,但是,您要求用户在 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];
通过使用 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
我发现上面的代码有两个问题:
br.readLine()
到int
的解析是抛出NumberFormatException
的行,因为br.readLine()
包含数字和空格(至少) .由于该行不是有效数字,因此解析失败。示例:
- 用户在执行
br.readLine()
时输入以下内容:“1 2 3 4” - 下一条指令如下:
int N = Integer.parseInt("1 2 3 4")
- 正确的数字不应包含空格:“1234”
- 用户在执行
这并不是真正的错误,但是,您要求用户在
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];