2. 设计程序,根据学生总成绩进行排序(降序排列),并输出学生姓名、每门课程的名称和 该学生的成绩、该学生的总成绩
import java.util.Arrays;
public class Q3{
public static void main(String[] args) {
// 设 names 数组中存放学生姓名
String[] names = { "安琪拉" , "王昭君" , "蔡文姬" , "妲己" , "张良" };
// 设 courses 数组中依次存放三门课程的名称
String[] courses = { "C++" , "Java" , "Python" };
// 设 scores 数组中依次存储的是 names 数组中各个学生的 C++ 、Java 、Python 课程的成绩
int[][] scores = {
{ 90 , 89 , 75 } ,
{ 59 , 40 , 100 } ,
{ 100 , 99 , 80 } ,
{ 80 , 61 , 61 } ,
{ 60 , 100 , 99 } ,
};
//设计程序,根据学生总成绩进行排序(降序排列),并输出学生姓名、每门课程的名称和该学生的成绩、该学生的总成绩
int[] sumArr = new int[scores.length]; //定义一个新数组用来存储总分,数组的长度为成绩的个数scores.length
for (int i = 0; i < scores.length; i++) { //外层循环遍历二维数组scores的每个子数组,从下标0开始
int sum = 0; //定义一个变量sum用来存储总分,刚开始是sum的值为0
for (int j = 0; j < scores[i].length; j++) { //内层循环遍历二维数组中的子数组scores[i]中的每个元素,从下标为0开始,长度小于子数组的长度
sum += scores[i][j]; //在内层循环中,通过累加将子数组中的每个成绩累加到sum中,得到该子数组的总分
}
sumArr[i] = sum; //将每个子数组的总分赋值给新数组sumArr的相应索引位置sumArr[i]
}
for (int i = 0; i < scores.length ; i++) {
for (int j = 0; j < scores[i].length + 1; j++) {
if (sumArr[j] < sumArr[j+1]){//总分排序
int temp = sumArr[j];
sumArr [j] = sumArr[j + 1];
sumArr [j + 1] = temp;
int[] temp1 = scores[j];//成绩排序
scores[j] = scores[j + 1];
scores[j + 1] = temp1;
String name = names[j];//姓名排序
names[j] = names[j+1];
names[j+1] = name;
}
}
}
System.out.println(Arrays.toString(sumArr));
for( int i = 0 ; i < scores.length ; i++ ){
System.out.print( names[ i ] + " => " ); // 输出学生姓名
for( int j = 0 ; j < scores[ i ] .length ; j++ ){
System.out.print( courses[ j ] + ":");// 输出课程名称
System.out.print( scores[ i ][ j ] ); // 输出课程成绩
if( j < scores[ i ] .length - 1 ) {
System.out.print( " , " );
}
}
System.out.print("\t总分:" + sumArr[i]);
System.out.println();
}
}
}