智能成绩表---重点 覆写comparator排序的compare函数

小明来到某学校当老师,需要将学生按考试总分或单科分数进行排名,你能帮帮他吗?

输入描述
第 1 行输入两个整数,学生人数 n 和科目数量 m。

0 < n < 100
0 < m < 10
第 2 行输入 m 个科目名称,彼此之间用空格隔开。

科目名称只由英文字母构成,单个长度不超过10个字符。
科目的出现顺序和后续输入的学生成绩一一对应。
不会出现重复的科目名称。
第 3 行开始的 n 行,每行包含一个学生的姓名和该生 m 个科目的成绩(空格隔开)

学生不会重名。
学生姓名只由英文字母构成,长度不超过10个字符。
成绩是0~100的整数,依次对应第2行种输入的科目。
第n+2行,输入用作排名的科目名称。若科目不存在,则按总分进行排序。

输出描述
输出一行,按成绩排序后的学生名字,空格隔开。成绩相同的按照学生姓名字典顺序排序。

用例1
输入
3 2
yuwen shuxue
fangfang 95 90
xiaohua 88 95
minmin 100 82
shuxue
输出
xiaohua fangfang minmin
说明
按shuxue成绩排名,依次是xiaohua、fangfang、minmin

import java.util.Collections;
import java.util.HashMap;
import java.util.Scanner;
import java.util.Comparator;
import java.util.ArrayList;class Student {public String name;public int rank[];// 设置一个学生类 设置未知元素个数的rank数组 记录 此学生的0-length-1门成绩Student(String name, int[] rank) {this.name = name;this.rank = rank;}
}public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int countOfStudent = in.nextInt();// 学生人数int countOfSubject = in.nextInt();// 学科数量String[] subjectNames = new String[countOfSubject];// 存储所有学科名字HashMap<String,Integer> map = new HashMap<String,Integer>();// 学科名字 对应  rank的索引位置 ArrayList<Student> students = new ArrayList<Student>();// 存储所有学生对象// 注意集合的定义 尽量把泛型写全 防止安全检查for (int i = 0; i < countOfSubject; i++) {subjectNames[i] = in.next();map.put(subjectNames[i],i);// map 存储学科名字 对应 索引}for (int i = 0; i < countOfStudent; i++) {// 存储每个学生对象String studentName = in.next();int rank[] = new int[countOfSubject];for (int j = 0; j < countOfSubject; j++) {rank[j] = in.nextInt();}Student student = new Student(studentName,rank);students.add(student);}String temp = in.nextLine();// 吃回车String subjectSort = in.nextLine();// 存储 指示排序的学科名字 /*System.out.println(subjectSort);for(Student student:students){System.out.print(student.name + " ");for(int i=0;i<student.rank.length;i++){System.out.print(student.rank[i] + " ");}System.out.println();}*/if(map.get(subjectSort)!=null){// 这个学科名字 存在于 map中 取出对应的索引  这个索引一定能满足rank数组的上下界int index = map.get(subjectSort);// 执行排序  将students的ArrayList链表进行排序洗牌sortStudents(students, index);}else{int index = countOfSubject;// 这个学科名字 不存在  则 将索引设置为  学科数量 == rank最大索引 + 1// 此时index  对 rank 是越界的  这个将作为判断条件在排序函数中应用sortStudents(students,index);}for(Student student:students){// 排序结束 输出排序后的结果System.out.print(student.name + " ");}}public static void sortStudents(ArrayList<Student> students, int index){// 排序函数  重点!!!!!students.sort(new Comparator<Student>(){// new Comparator 对象// 覆写 compare 方法@Overridepublic int compare(Student s1,Student s2){if(index>=0 && index<s1.rank.length && index<s2.rank.length){// index 没有超过 rank 的正常上下索引 int diff = s2.rank[index] - s1.rank[index];if(diff!=0){// 用来排序的值不同return diff;}else{// 用来排序的值相同的情况  用name的字典序列排序return s1.name.compareTo(s2.name);}}else{// index 超出索引范围  用rank总和排序int divSum = sumArray(s2.rank)-sumArray(s1.rank);if(divSum != 0){return divSum;}else{// 用来排序的值相同的情况  用name的字典序列排序return s1.name.compareTo(s2.name);}}}});}public static int sumArray(int []rank){// 计算rank数组和int sum = 0;for(int value:rank){sum+=value;}return sum;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/805849.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BERT实战指南:使用预训练模型进行文本分类任务

1. 简介 在本章中&#xff0c;我们将介绍BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;预训练模型的背景和应用领域。 BERT背景介绍 BERT是由Google在2018年提出的一种预训练语言模型&#xff0c;它基于Transformer架构进行设计&am…

【java工具-灵活拉取数据库表结构和数据】

需求&#xff1a; 假设我们现在有一个需求&#xff0c;需要快速拉取数据库的某些表建表语句&#xff0c;和数据&#xff0c;平时做备份之类&#xff1b; 我这边自己写了个工具&#xff0c;不多废话&#xff0c;也不整虚的&#xff0c; 直接看代码&#xff1a; package com.…

在线客服系统:企业沟通的未来

随着互联网技术的飞速发展&#xff0c;企业与客户之间的沟通方式也在经历着翻天覆地的变化。在这个信息爆炸的时代&#xff0c;一个高效、便捷、智能的在线客服系统成为了企业提升服务质量、增强客户满意度的关键。在线客服系统的重要性在线客服系统是企业与客户进行实时沟通的…

GitLab教程(一):安装Git、配置SSH公钥

文章目录 序一、Git安装与基本配置&#xff08;Windows&#xff09;下载卸载安装基本配置 二、SSH密钥配置 序 为什么要使用代码版本管理工具&#xff1a; 最近笔者确实因为未使用代码版本管理工具遇到了一些愚蠢的问题&#xff0c;笔者因此认为代码版本管理工具对于提高团队…

JR-SMD201-P便携式网络解码器

详细介绍&#xff1a; JR-SMD201-P便携式网络解码器采用1/2U设计&#xff0c;支持AVS/H.265/H.264/MPEG2解码&#xff0c;支持IP输入&#xff0c;支持1080P/1080I/720P/576I/480I多种分辨率&#xff0c;支持DRA/AC3/EAC3/AAC/MPEG等音频。 产品特点 支持输入方式IP 接口丰富&a…

React 状态管理:安全高效地修改对象属性的 3 种方法

在 React 应用程序中,状态(state)是驱动整个应用程序的核心。当应用程序的状态发生变化时,React 会自动重新渲染相应的组件,以确保用户界面的更新。 与数组状态一样,对象状态在 React 中也需要特别处理。直接修改对象属性是不被允许的,因为 React 的不可变性原则要求我们创建一…

户外骑行存档(图新地球与运动健康App)经验分享

0序 之前天天加班熬夜&#xff0c;身体素质有些下降&#xff0c;在锻炼的过程中喜欢上了骑行&#xff0c;周周骑、天天骑。 骑行会产生很多的轨迹&#xff08;有很多朋友不喜欢装很多app&#xff0c;就用手机自带的运动健康&#xff0c;也有喜欢专业运动app的&#xff0c;道理…

RedisDesktopManager 命令

RedisDesktopManager 命令 Redis Desktop Manager&#xff08;RDM&#xff09;是一个图形化工具&#xff0c;用于管理和监控Redis数据库。虽然其主要功能是提供直观的用户界面来与Redis交互&#xff0c;但它也内置了一个命令行界面&#xff08;Console&#xff09;&#xff0c…

SQL注入原理与信息获取及常规攻击思路靶场实现

SQL注入原理与信息获取及常规攻击思路靶场实现 很早的时候就写了&#xff0c;权当备份吧 Web程序三层架构 表示层 &#xff1a;与用户交互的界面 , 用于接收用户输入和显示处理后用户需要的数据 业务逻辑层 &#xff1a;表示层和数据库访问层之间的桥梁 , 实现业务逻辑 ,验证、…

BPMN.JS中文教程学习

基础篇 vue bpmn.js 建模BpmnModeler将数据转图形bpmnModeler.importXML // basic.vue<script>// 引入相关的依赖import BpmnModeler from bpmn-js/lib/Modelerimport {xmlStr} from ../mock/xmlStr // 这里是直接引用了xml字符串export default {name: ,components: {…

三维点云:对原始点云数据进行体素化

文章目录 一、原始点云二、对原始点云进行体素化三、结果展示 一、原始点云 &#x1f349;原始点云为.pts文件&#xff0c;内容为x, y, z的坐标 原始点云展示 二、对原始点云进行体素化 使用open3d库实现&#xff0c;如果没有需要在命令行执行pip install open3d import o…

从零开始学RSA:低加密指数广播攻击

(10)低加密指数广播攻击 如果选取的加密指数较低&#xff0c;并且使用了相同的加密指数给一个接受者的群发送相同的信息&#xff0c;那么可以进行广播攻击得到明文。 适用范围&#xff1a;模数n、密文c不同&#xff0c;明文m、加密指数e相同。一般情况下&#xff0c;ek (k是题…

vue vue3 手写 动态加载组件

效果展示 一、需求背景&#xff1a; # vue3 项目涉及很多图表加载、表格加载 #考虑手写一个动态加载组件 二、实现思路 通过一个加载状态变量&#xff0c;通过v-if判断&#xff0c;加载状态的变量等于哪一个&#xff0c;动态加载组件内部就显示的哪一块组件。 三、实现效果…

25.设置及使用coredump文件

设置及使用coredump文件 文章目录 设置及使用coredump文件coredump文件介绍开启关闭核心转储core dumps功能开启核心转储生成功能关闭生成转储文件 coredumps文件的使用查看core进程的所有线程堆栈reference 欢迎访问个人网络日志&#x1f339;&#x1f339;知行空间&#x1f3…

2404d,d符号表示dip1045

原文 符号表示 概述 符号是本地语言功能的最终表示.在编译器或语言级别,不准确表示它们可能会导致链接失败.这些问题可能是令人沮丧的重要来源,甚至可能导致人们认为无法实现方法. 此DIP的目的是解决和纠正各种跨平台和目标的常见共享库链接错误. 理由 对不熟悉链接器的人…

数位DP模型

目录 度的数量思路代码实现暴力解法数位DP 数字游戏代码实现 Windy数代码实现 数字游戏 II代码实现 不要62代码实现 恨7不成妻代码实现 度的数量 题目描述&#xff1a; 求给定区间 [ X , Y ] [X,Y] [X,Y] 中满足下列条件的整数个数&#xff1a;这个数恰好等于 K K K 个互不…

安装Schedule库的方法最终解答!_Python第三方库

安装Python第三方库Schedule 我的环境&#xff1a;Window10&#xff0c;Python3.7&#xff0c;Anaconda3&#xff0c;Pycharm2023.1.3 Schedule库 Schedule 是一个轻量级、功能强大而灵活的任务调度工具库&#xff0c;用于在指定的时间间隔内执行任务。为用户提供了简单易用的…

kali使用msf+apkhook520+cploar实现安卓手的攻击

学习网络安全的过程中&#xff0c;突发奇想怎么才能控制或者说是攻击手机 边找工作边实验 话不多说启动kali 一、使用msfapktool生成简单的木马程序 首先使用kali自带的msfvenom写上这样一段代码 选择安卓 kali的ip 一个空闲的端口 要输出的文件名 msfvenom -p android/met…

kafka(五)——消费者流程分析(c++)

概念 ​ 消费者组&#xff08;Consumer Group&#xff09;&#xff1a;由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据&#xff0c;一个分区只能由一个组内消费者消费&#xff1b;消费者组之间互不影响。所有的消费者都属于某个消费者组&#xff0c;即消费者…

计算机是怎么工作的7

内存分配——内存管理&#xff08;Memory Mangae) 进程如何管理内存&#xff0c;其实是一个非常复杂的事情 核心结论&#xff1a;每个进程的内存&#xff0c;是彼此独立&#xff0c;互不干扰的 通常情况下&#xff0c;进程A不能直接访问进程B的内存; 为了系统的稳定性 如果…