当前位置: 首页 > article >正文

多关键字排序(java实训)

题目:

学生考试成绩的统计利用计算机软件将变得十份简单的事,由于你很勤奋,并且刚学习了面向对象程序设计Java,在Java中提供了面向对象程序设计方法,并提供了大量有用的工具类,解决该问题你将成为能手,我们知道只要利用容器 Collections.sort()方法,很方便解决对象的排序问题,如果一个年级的学生参加了有语文、数学和英语三科目的考试,需要计算出每个学生的总分和平均成绩,并且要按照总分排序,如果总分相同,则依照语文、数学再英语的成绩排序,即排序关键词依次为总分、语文、数学、英语。请你设计一个程序解决该问题。
    提示:利用输入数据的每行创建一个Student对象,将所有学生对象存储到一个List<Student> stulist = new ArrayList<Student>();线性表中,再利用Collections.sort(stulist,new MyComptor());就解决排序问题,然后将stulist中的每个学生输出,就完成该排序问题了,但为了能排序,Collections必须知道对象排序规则,要定义一个规则,是通过设计一个比较器完成,比较器的主体如下:

class MyComptor implements Comparator<Object> {  
    public int compare(Object o1, Object o2) {
        Student stu1 =(Student)o1;
        Student stu2 =(Student)o2;
        if(...){//填写比较规则
            return 1;
        }else{
            return 0;
        }
    }
 
}
   下面是一个点对象排序的参考实例:

        Point point2 = new Point(2,2,2);
        Point point1 = new Point(1,1,1);
        Point point3 = new Point(3,1,2);
       
        List<Point> points = new ArrayList<Point>();
        points.add(point2);
        points.add(point1);
        points.add(point3);       
      
        //根据point中的升序输出
        Collections.sort(points, new SortByXdesc());
 
SortByXdesc对象的定义如下:
public class SortByXdesc implements Comparator<Object> {
 
    //根据point中的x降序输出
    @Override
    public int compare(Object o1, Object o2) {
        Point point1 =(Point)o1;
        Point point2 =(Point)o2;
        if(point1.getX()>point2.getX()){
            return 1;
        }else{
            return 0;
        }
    }
 
}
标准输入:
   第一行为一个正整数N,表示该年纪共有的学生数,接下来的N行,每行为一个学生的信息,依次为学号、班级、语文成绩、数学成绩和英语成绩,其中学号为10个字符的字符串,班级和成绩为正整数,他们之间由一个空格隔开。
标准输出:
   输出该年级学生的成绩单,即根据总分和语文、数学、英语成绩为次关键词的排序后的成绩单,每行输出一个学生的成绩,使用一个空格隔开,依次输出如下数据:
学号 班级 语文 数学 英语 总分 平均
其中平均成绩四舍五入保留2位小数。

测试用例输入:

4
0806401001    1     56    64    77
0806401002    1     75    68    54
0806401003    1     68    79    76
0806401004    1     56    57    84

测试用例输出:
0806401003 1 68 79 76 223 74.33
0806401002 1 75 68 54 197 65.67
0806401001 1 56 64 77 197 65.67
0806401004 1 56 57 84 197 65.67

代码:

当时写的

import java.util.Scanner;

class Xingyuxingxi{
    public static void main(String[] args) {
        int a;
        Scanner sc=new Scanner(System.in);
        a=sc.nextInt();
        String []b=new String[a] ;
        int []c=new int[a];
        int []d=new int[a];
        int []e=new int[a];
        int []h=new int[a];
        int []f=new int[a];
        double []g=new double[a];
        for(int i=0;i<a;i++)
        {
            b[i]=sc.next();
            h[i]=sc.nextInt();
            c[i]=sc.nextInt();
            d[i]=sc.nextInt();
            e[i]=sc.nextInt();
            f[i]=c[i]+d[i]+e[i];
            g[i]=1.0*f[i]/3;
        }
        for(int i=0;i<a-1;i++)
        {
            for(int j=0;j<a-i-1;j++)
            {
                if(e[j]<e[j+1])
                {
                    String t1=b[j];
                    b[j]=b[j+1];
                    b[j+1]=t1;
                    int t2=c[j];
                    c[j]=c[j+1];
                    c[j+1]=t2;
                    t2=h[j];
                    h[j]=h[j+1];
                    h[j+1]=t2;
                    t2=d[j];
                    d[j]=d[j+1];
                    d[j+1]=t2;
                    t2=e[j];
                    e[j]=e[j+1];
                    e[j+1]=t2;
                    t2=f[j];
                    f[j]=f[j+1];
                    f[j+1]=t2;
                    double t3=g[j];
                    g[j]=g[j+1];
                    g[j+1]=t3;
                }
            }
        }
        for(int i=0;i<a-1;i++)
        {
            for(int j=0;j<a-i-1;j++)
            {
                if(d[j]<d[j+1])
                {
                    String t1=b[j];
                    b[j]=b[j+1];
                    b[j+1]=t1;
                    int t2=c[j];
                    c[j]=c[j+1];
                    c[j+1]=t2;
                    t2=h[j];
                    h[j]=h[j+1];
                    h[j+1]=t2;
                    t2=d[j];
                    d[j]=d[j+1];
                    d[j+1]=t2;
                    t2=e[j];
                    e[j]=e[j+1];
                    e[j+1]=t2;
                    t2=f[j];
                    f[j]=f[j+1];
                    f[j+1]=t2;
                    double t3=g[j];
                    g[j]=g[j+1];
                    g[j+1]=t3;
                }
            }
        }
        for(int i=0;i<a-1;i++)
        {
            for(int j=0;j<a-i-1;j++)
            {
                if(c[j]<c[j+1])
                {
                    String t1=b[j];
                    b[j]=b[j+1];
                    b[j+1]=t1;
                    int t2=c[j];
                    c[j]=c[j+1];
                    c[j+1]=t2;
                    t2=h[j];
                    h[j]=h[j+1];
                    h[j+1]=t2;
                    t2=d[j];
                    d[j]=d[j+1];
                    d[j+1]=t2;
                    t2=e[j];
                    e[j]=e[j+1];
                    e[j+1]=t2;
                    t2=f[j];
                    f[j]=f[j+1];
                    f[j+1]=t2;
                    double t3=g[j];
                    g[j]=g[j+1];
                    g[j+1]=t3;
                }
            }
        }
        for(int i=0;i<a-1;i++)
        {
            for(int j=0;j<a-i-1;j++)
            {
                if(f[j]<f[j+1])
                {
                    String t1=b[j];
                    b[j]=b[j+1];
                    b[j+1]=t1;
                    int t2=c[j];
                    c[j]=c[j+1];
                    c[j+1]=t2;
                    t2=h[j];
                    h[j]=h[j+1];
                    h[j+1]=t2;
                    t2=d[j];
                    d[j]=d[j+1];
                    d[j+1]=t2;
                    t2=e[j];
                    e[j]=e[j+1];
                    e[j+1]=t2;
                    t2=f[j];
                    f[j]=f[j+1];
                    f[j+1]=t2;
                    double t3=g[j];
                    g[j]=g[j+1];
                    g[j+1]=t3;
                }
            }
        }
        for(int i=0;i<a;i++)
        {
            System.out.println(b[i]+" "+h[i]+" "+c[i]+" "+d[i]+" "+e[i]+" "+f[i]+" "+String.format("%.2f",g[i]));
        }
    }

}
//6
//0001 1 1 2 3 6 2
//0002 1 2 1 3
//0003 1 3 2 1
//0004 1 2 3 1
//0005 1 3 1 2
//0006 1 1 3 2

http://www.kler.cn/a/160488.html

相关文章:

  • GitHub Org
  • Chromium 中MemoryMappedFile使用例子c++
  • 场景解决之mybatis当中resultType= map时,因某个字段为null导致返回的map的key不存在怎么处理
  • 欧国联的规则,你都了解吗?
  • AI生活之我用AI处理Excel表格
  • 【大数据技术基础 | 实验十】Hive实验:部署Hive
  • HarmonyOS4.0从零开始的开发教程04 初识ArkTS开发语言(下)
  • 机器学习---pySpark案例
  • 深入理解Vue.js中的this:解析this关键字及其使用场景
  • uniapp实战 —— 分类导航【详解】
  • 设置webstorm和idea符合Alibaba规范
  • 【Docker】从零开始:17.Dockerfile基本概念
  • 指定分隔符对字符串进行分割 numpy.char.split()
  • 自然语言处理(NLP)技术-AI生成版
  • Flinksql bug :Illegal mixing of types in CASE or COALESCE statement
  • 按天批量创建间隔分区表(DM8:达梦数据库)
  • 【PTA-C语言】编程练习4 - 数组Ⅰ
  • HarmonyOS4.0从零开始的开发教程08构建列表页面
  • 17、XSS——session攻击
  • 【动态规划】LeetCode-面试题 17.16. 按摩师
  • 配置阿里云CLI-aliyun命令与安装ossutil
  • 数据结构之交换排序
  • Flink优化——数据倾斜(二)
  • ssh远程连接服务器
  • ELK的日志解决方案
  • PACS源码,医学影像传输系统源码,全院级应用,支持放射、超声、内窥镜、病理等影像科室,且具备多种图像处理及三维重建功能