题目:统计十个同学的最高分,最低分以及平均分
程序分析
我们需要实现一个程序来统计十个同学的最高分、最低分和平均分。首先,让我们看看所需的步骤:
- 读取十个同学的分数。
- 计算最高分和最低分。
- 计算平均分。
- 输出最高分、最低分和平均分的结果。
让我们分别实现三种不同的方法。
方法一:使用数组存储分数
解题思路:
- 创建一个长度为10的数组,用于存储十个同学的分数。
- 使用循环依次读取十个同学的分数,并将其存储在数组中。
- 遍历数组以找到最高分和最低分。
- 计算平均分。
- 输出最高分、最低分和平均分的结果。
实现代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] scores = new int[10];
for (int i = 0; i < 10; i++) {
System.out.print("Enter score for student " + (i + 1) + ": ");
scores[i] = scanner.nextInt();
}
int maxScore = scores[0];
int minScore = scores[0];
int totalScore = scores[0];
for (int i = 1; i < 10; i++) {
if (scores[i] > maxScore) {
maxScore = scores[i];
}
if (scores[i] < minScore) {
minScore = scores[i];
}
totalScore += scores[i];
}
double averageScore = (double) totalScore / 10;
System.out.println("Maximum Score: " + maxScore);
System.out.println("Minimum Score: " + minScore);
System.out.println("Average Score: " + averageScore);
}
}
优点:
- 使用数组方便存储和处理多个分数。
- 可以处理任意数量的同学分数。
缺点:
- 需要额外的内存来存储分数。
- 程序中需要硬编码数组的长度。
方法二:使用变量记录最高分和最低分
解题思路:
- 使用循环依次读取十个同学的分数,并在读取每个分数时,更新最高分和最低分。
- 同时累加分数,以便计算平均分。
- 在循环结束后,计算平均分。
- 输出最高分、最低分和平均分的结果。
实现代码:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int maxScore = Integer.MIN_VALUE;
int minScore = Integer.MAX_VALUE;
int totalScore = 0;
for (int i = 0; i < 10; i++) {
System.out.print("Enter score for student " + (i + 1) + ": ");
int score = scanner.nextInt();
maxScore = Math.max(maxScore, score);
minScore = Math.min(minScore, score);
totalScore += score;
}
double averageScore = (double) totalScore / 10;
System.out.println("Maximum Score: " + maxScore);
System.out.println("Minimum Score: " + minScore);
System.out.println("Average Score: " + averageScore);
}
}
优点:
- 不需要额外的内存来存储分数。
- 适用于处理少量数据。
缺点:
- 不适用于处理动态数量的同学分数。
- 程序中需要硬编码循环的次数。
方法三:使用集合记录分数
解题思路:
- 使用集合(如ArrayList)来存储十个同学的分数,这允许处理不定数量的分数。
- 使用循环依次读取十个同学的分数,并将其添加到集合中。
- 使用集合中的方法(如Collections.max()、Collections.min())来找到最高分和最低分。
- 计算平均分。
- 输出最高分、最低分和平均分的结果。
实现代码:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> scores = new ArrayList<>();
for (int i = 0; i < 10; i++) {
System.out.print("Enter score for student " + (i + 1) + ": ");
int score = scanner.nextInt();
scores.add(score);
}
int maxScore = Collections.max(scores);
int minScore = Collections.min(scores);
int totalScore = 0;
for (int score : scores) {
totalScore += score;
}
double averageScore = (double) totalScore / 10;
System.out.println("Maximum Score: " + maxScore);
System.out.println("Minimum Score: " + minScore);
System.out.println("Average Score: " + averageScore);
}
}
优点:
- 可以处理不定数量的同学分数。
- 使用集合函数简化了查找最高分和最低分的过程。
缺点:
- 需要额外的内存来存储分数。
- 略微复杂,特别是对于小规模数据。
总结
在这个问题中,推荐使用方法三,即使用集合记录分数。这种方法具有更大的灵活性,可以处理不定数量的同学分数,而且代码相对简洁。方法二适用于处理少量数据,但不适合处理动态数量的同学分数。方法一适用于处理多个分数,但需要硬编码数组的长度,不够灵活。