成绩排序2 Java(结构体)
问题描述:
给出n个学生的成绩,将这些学生按成绩排序,排序规则:总分高的在前;总分相同,数学成绩高的在前;总分与数学相同,英语高的在前;总分数学英语都相同,学号小的在前
代码:
import java.util.Scanner;
public class 成绩排序2
{
public static class Student
{
int number;// 学号
int sum;// 总分
int math;// 数学
int english;// 英语
int chinese;// 语文
// 初始化
public Student()
{
number = 0;
sum = 0;
math = 0;
english = 0;
chinese = 0;
}
}
public static void main(String[] args) {
// 给出n个学生的成绩,将这些学生按成绩排序,排序规则:总分高的在前;
// 总分相同,数学成绩高的在前;总分与数学相同,英语高的在前;总分数学英语都相同,学号小的在前
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();// 输入的学生总人数
Student[] arr = new Student[n];// 结构体数组存储每个学生的成绩
// 输入
for (int i = 0; i < arr.length; i++)
{
arr[i]=new Student();
arr[i].math = sc.nextInt();
arr[i].english = sc.nextInt();
arr[i].chinese = sc.nextInt();
arr[i].number = i + 1;
arr[i].sum = arr[i].math + arr[i].english + arr[i].chinese;
}
// 调用排序
sort(arr);
// 输出
for (int i = arr.length-1; i >=0; i--)
{
System.out.println(arr[i].math + " " + arr[i].english + " "
+ arr[i].chinese + " " + arr[i].number);
}
}
// 冒泡排序
public static void sort(Student[] arr) {
for (int i = 0; i < arr.length - 1; i++)
{
for (int j = 0; j < arr.length - i - 1; j++)
{
if (arr[j].sum > arr[j + 1].sum)//总分高的在前
{
swap(j, j + 1, arr);
} else if (arr[j].sum == arr[j + 1].sum
&& arr[j].math > arr[j + 1].math)//总分相等,数学成绩高的在前
{
swap(j, j + 1, arr);
} else if (arr[j].sum == arr[j + 1].sum
&& arr[j].math == arr[j + 1].math
&& arr[j].english > arr[j + 1].english)//总分和数学都相等,英语成绩高的在前
{
swap(j, j + 1, arr);
} else if (arr[j].sum == arr[j + 1].sum
&& arr[j].math == arr[j + 1].math
&& arr[j].english == arr[j + 1].english
&& arr[j].number > arr[j + 1].number)//总分、数学、英语成绩都相等,学号小的在前
{
swap(j, j + 1, arr);
}
}
}
}
// 交换
public static void swap(int i, int j, Student[] arr) {
Student temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}