public class Exercise07_17 { public static void main(String[] args) { java.util.Scanner sc = new java.util.Scanner(System.in); System.out.print("Enter the number of students:"); int numbers = sc.nextInt();//用户输入学生人数 String[] name = new String[numbers];//存储姓名 int[] fraction = new int[numbers];//存储分数 System.out.print("Enter name and corresponding score:"); for (int i = 0; i < numbers; i++) {//用户输入姓名和对应分数 name[i] = sc.next(); fraction[i] = sc.nextInt(); while (fraction[i] < 0){//成绩值不可小于0 System.out.print("!Enter correct grade:"); fraction[i] = sc.nextInt(); } } for (int i = 0; i < numbers - 1; i++) { //暂定fraction数组位置i为最大成绩 int currentMax = fraction[i]; int currentMaxIndex = i; //循环寻找数组最大元素 for (int j = i + 1; j < numbers; j++) {//每次外层循环后位置i前的数都比i大,因此从位置i+1开始与i比较 if (currentMax < fraction[j]) { currentMax = fraction[j]; currentMaxIndex = j; } } if (currentMaxIndex != i) { //互换成绩排位 fraction[currentMaxIndex] = fraction[i]; fraction[i] = currentMax; //互换姓名,成绩高的姓名排在数组前位 //因为姓名和对应成绩都位于所在数组的同一下标,所以姓名可由对应成绩下标进行降序排序 String temp = name[currentMaxIndex]; name[currentMaxIndex] = name[i]; name[i] = temp; } } //每行打印5个(非必须) for (int i = 0; i < numbers; i++) System.out.print(name[i] + ((i + 1) % 5 == 0 ? "\n" : " ")); } }
java黑皮书课后习题7.17
最新推荐文章于 2023-06-12 05:10:59 发布