注册 登录
编程论坛 JAVA论坛

学生成绩按总分降序,总分相同的按数学分数降序,按数学再排序不会做了

ma1976222027 发布于 2018-04-21 16:29, 3679 次点击
//学生成绩按总分降序,总分相同的按数学分数降序,按数学再排序不会做了

public class student {
    public static void main(String[] args) {
        student x1 = new student("张三", 1999, 56, 65, 66, 95);
        student x2 = new student("国人", 3999, 76, 65, 86, 96);
        student x3 = new student("复合", 4999, 65, 50, 70, 50);
        student x4 = new student("法规", 5999, 66, 75, 65, 76);
        student[] xs = { x1, x2, x3, x4 };

        for (int j = 0; j < xs.length; j++) {
            for (int i = j; i < xs.length; i++) {

                if ((xs[j].get化学() + xs[j].get数学() + xs[j].get英语() + xs[j]
                        .get语文()) < (xs[i].get化学() + xs[i].get数学()
                        + xs[i].get英语() + xs[i].get语文())) {
                    student xx = xs[j];
                    xs[j] = xs[i];
                    xs[i] = xx;
                }
            }
        }
        for (int j = 0; j < xs.length; j++) {
            for (int i = j; i < xs.length; i++) {

                if ((xs[j].get化学() + xs[j].get数学() + xs[j].get英语() + xs[j]
                        .get语文()) == (xs[i].get化学() + xs[i].get数学()
                        + xs[i].get英语() + xs[i].get语文())
                        || (xs[j].get数学() < xs[i].get数学())) {

                    /*
                     * if (xs[j].get数学() < xs[i].get数学()) { student xx = xs[j];
                     * xs[j] = xs[i]; xs[i] = xx; }
                     */
                }
            }
            }// }
            System.out
                    .println("---------------------------------------------------------------");
            System.out.println("姓名\t学号\t数学\t化学\t语文\t英语\t总分\t");

            for (student sp : xs) {
                System.out.println(sp.get姓名() + "\t" + sp.get学号() + "\t"
                        + sp.get数学() + "\t" + sp.get化学() + "\t" + sp.get语文()
                        + "\t" + sp.get英语() + "\t"
                        + (sp.get化学() + sp.get数学() + sp.get英语() + sp.get语文())
                        + "\t");
        }
    }
}
4 回复
#2
静水且流深2018-04-21 20:05
类名首字母大写,方法名不要用中文。。。
#3
静水且流深2018-04-21 20:22
学生成绩按总分降序,总分相同的按数学分数降序,按数学再排序不会做了

再按数学降序?
#4
ma19762220272018-04-23 11:26
comparator实现接口,
int ret = a.sum().compateTo(b.su) ,
if(ret ==0 ){ return a.数学 compareTo b.数学}
else return ret ;
#5
ma19762220272018-04-23 11:26
总分相同的按数学分数降序。这里是一个if-else的判断。你要在else里再判断一次。第二个嵌套循环不需要。第一个嵌套循环里的第二层这么写
if ((xs[j].get化学() + xs[j].get数学() + xs[j].get英语() + xs[j].get语文())
     < (xs[i].get化学() + xs[i].get数学() + xs[i].get英语() + xs[i].get语文())
    ) {
    student xx = xs[j];
    xs[j] = xs[i];
    xs[i] = xx;
}else if(xs[j].get化学() + xs[j].get数学() + xs[j].get英语() + xs[j].get语文()
     == xs[i].get化学() + xs[i].get数学() + xs[i].get英语() + xs[i].get语文()){
    if(xs[j].get数学() < xs[i].get数学();){
        student xx = xs[j];
        xs[j] = xs[i];
        xs[i] = xx;
    }
}
1