Java编程疑问:如何关联分数与姓名数组,获取最值对应学生
解决分数与对应学生姓名关联的问题
你的核心问题是只记录了最高分和最低分的数值,没记录它们在数组中的索引位置——而姓名数组names和分数数组marks的索引是一一对应的,只要拿到最值分数的索引,就能直接通过names[索引]获取对应学生姓名。
修改步骤:
- 替换
maxMark和minMark为maxIndex和minIndex,初始值设为0(第一个学生的索引) - 遍历分数数组时,比较当前分数与
marks[maxIndex](当前最高分的分数),如果更大就更新maxIndex为当前索引;最低分同理 - 输出时通过
names[maxIndex]和names[minIndex]获取对应姓名,同时可带上分数让结果更清晰
修改后的完整代码:
import java.util.Scanner; public class Marks { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("How many students are there? "); int n = sc.nextInt(); String[] names = new String[n]; int[] marks = new int[n]; for (int i = 0; i < n; i++) { System.out.print("Enter name of student " + (i + 1) +": " ); names[i] = sc.next(); System.out.print("Enter mark " + (i + 1) +": "); marks[i] = sc.nextInt(); } float sum = 0; for (int i = 0;i < n;i++) { sum += marks[i]; } float average = (sum / marks.length); System.out.println("The average mark is: " + average); // 追踪最高分的索引,而非分数值 int maxIndex = 0; for (int i = 0;i < n; i++){ if (marks[i] > marks[maxIndex]){ maxIndex = i; } } // 追踪最低分的索引,而非分数值 int minIndex = 0; for (int i = 0;i < n; i++){ if (marks[i] < marks[minIndex]){ minIndex = i; } } System.out.println("The best student is " + names[maxIndex] + " with mark " + marks[maxIndex]); System.out.println("The worst student is " + names[minIndex] + " with mark " + marks[minIndex]); } }
额外说明:
如果存在多个学生分数同为最高分/最低分的情况,当前代码只会输出第一个出现的学生。如果需要输出所有最值学生,可以遍历数组收集所有对应索引后再统一输出。
内容的提问来源于stack exchange,提问作者Hamish McEwan
相关产品推荐
相关产品推荐

