2301_77357765 2023-03-31 16:50 采纳率: 100%
浏览 40
已结题

为什么不进行排序啊,能改下吗?

img

img

img


按照总分,学号,姓名的代码未进行排序,怎么改,用冒泡排序。能在代码上改一下吗。

  • 写回答

3条回答 默认 最新

  • CSDN专家-sinJack 2023-03-31 17:45
    关注

    j和j+1交换不是和i交换

    import java.util.Scanner;
    public class Student {
        private String name;
        private String stuId;
        private int[] scores;
        private double avgScore;
    
        public Student(String name, String stuId, int[] scores) {
            this.name = name;
            this.stuId = stuId;
            this.scores = scores;
            double totalScore = 0;
            for (int score : scores) {
                totalScore += score;
            }
            this.avgScore = totalScore / scores.length;
        }
    
        public String getName() {
            return name;
        }
    
        public String getStuId() {
            return stuId;
        }
    
        public int[] getScores() {
            return scores;
        }
    
        public double getAvgScore() {
            return avgScore;
        }
    
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            System.out.print("请输入学生的个数:");
            int n = scanner.nextInt();
            scanner.nextLine();
    
            Student[] students = new Student[n];
            for (int i = 0; i < n; i++) {
                System.out.print("请输入第" + (i+1) + "个学生的名字:");
                String name = scanner.nextLine();
    
                System.out.print("请输入第" + (i+1) + "个学生的学号:");
                String stuId = scanner.nextLine();
    
                System.out.print("请输入第" + (i+1) + "个学生的成绩(以空格分隔):");
                String[] scoreStrArr = scanner.nextLine().split(" ");
                int[] scores = new int[scoreStrArr.length];
                for (int j = 0; j < scores.length; j++) {
                    scores[j] = Integer.parseInt(scoreStrArr[j]);
                }
    
                students[i] = new Student(name, stuId, scores);
            }
    
            // 计算每门学科的平均成绩
            double[] subjectAvgScores = new double[students[0].getScores().length];
            for (int i = 0; i < subjectAvgScores.length; i++) {
                double totalScore = 0;
                for (Student student : students) {
                    totalScore += student.getScores()[i];
                }
                subjectAvgScores[i] = totalScore / n;
            }
            System.out.println("每门学科的平均成绩为:");
            for (int i = 0; i < subjectAvgScores.length; i++) {
                System.out.print(subjectAvgScores[i] + " ");
            }
            System.out.println();
    
            // 计算每位同学的平均成绩,并按学号由大到小排序
            System.out.println("按学号由大到小排序的每位同学的平均成绩为:");
            for (int i = 0; i < students.length; i++) {
                for (int j = 0; j < students.length-i-1; j++) {
                    if (students[j].getStuId().compareTo(students[j+1].getStuId()) < 0) {
                        Student temp = students[j];
                        students[j] = students[j+1];
                        students[j+1] = temp;
                    }
                }
            }
            for (Student student : students) {
                System.out.println(student.getName() + " " + student.getStuId() + " " + student.getAvgScore());
            }
    
            // 按总成绩由大到小排序
            System.out.println("按总成绩由大到小排序的所有学生信息为:");
            for (int i = 0; i < students.length; i++) {
                for (int j = 0; j < students.length-i-1; j++) {
                    double score1 = 0;
                    for (int k = 0; k < students[j].getScores().length; k++) {
                        score1 += students[j].getScores()[k];
                    }
                    double score2 = 0;
                    for (int k = 0; k < students[j+1].getScores().length; k++) {
                        score2 += students[j+1].getScores()[k];
                    }
                    if (score1 < score2) {
                        Student temp = students[j];
                        students[j] = students[j+1];
                        students[j+1] = temp;
                    }
                }
            }
            for (Student student : students) {
                System.out.println(student.getName() + " " + student.getStuId() + " " + student.getAvgScore());
            }
        }
    } 
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月8日
  • 已采纳回答 3月31日
  • 修改了问题 3月31日
  • 创建了问题 3月31日

悬赏问题

  • ¥30 Unity接入微信SDK 无法开启摄像头
  • ¥20 有偿 写代码 要用特定的软件anaconda 里的jvpyter 用python3写
  • ¥20 cad图纸,chx-3六轴码垛机器人
  • ¥15 移动摄像头专网需要解vlan
  • ¥20 access多表提取相同字段数据并合并
  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源