我的类似界面逻辑有什么问题?

2023-12-12

所以问题如下

为每个进入队列的学生分配一个唯一的 ID。队列根据以下标准(优先级标准)为学生提供服务:

首先服务的是累积平均绩点 (CGPA) 最高的学生。

任何具有相同 CGPA 的学生都将按姓名按升序区分大小写的字母顺序排列。

任何具有相同 CGPA 和姓名的学生将按 id 升序排列

My code

class Priorities{
    public List<Students> getStudents(List<String> events) {
            PriorityQueue<Students> pq = new PriorityQueue<Students>();
            for ( String s : events) {
                if ( s.contains("ENTER")) {
                    String [] arr = s.split(" ");
                    int id = Integer.parseInt(arr[3]);
                    String name = arr[1];
                    Double cgpa = Double.parseDouble(arr[2]);       
                    pq.add(new Students(id, name, cgpa));
                }
                else
                    pq.poll();
            
            }
            List<Students> studentList = new ArrayList<Students>(pq);
    
            return studentList;
        }
        
        
        
    }
    
class Students implements Comparable<Students>{
    
    int id;
    String name;
    double cgpa;
    
    public Students(int id, String name, double cgpa) {
        this.id = id;
        this.name = name;
        this.cgpa = cgpa;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getCgpa() {
        return cgpa;
    }

    public void setCgpa(double cgpa) {
        this.cgpa = cgpa;
    }
        // -1 return left, 1 return right
    public int compareTo(Students other) {
    if ( this.equals(other))
        return 0;
    else if ( this.getCgpa() > other.getCgpa())
        return -1;
    else if ( this.getCgpa() < other.getCgpa())
        return 1;
    else if ( this.getCgpa() == other.getCgpa() && this.getName().compareTo(other.getName()) == 0)
        return Integer.compare(this.getId(), other.getId());
    else 
        return this.getName().compareTo(other.getName());
    
        
}
}

输入样本

12
ENTER John 3.75 50
ENTER Mark 3.8 24
ENTER Shafaet 3.7 35
SERVED
SERVED
ENTER Samiha 3.85 36
SERVED
ENTER Ashley 3.9 42
ENTER Maria 3.6 46
ENTER Anik 3.95 49
ENTER Dan 3.95 50
SERVED

样本输出

Dan
Ashley
Shafaet
Maria

我得到以下信息

Dan
Ashley
Maria
Shafaet

编辑:使用

List<Students> studentList = new ArrayList<Students>();
        while(!pq.isEmpty())
        {
            studentList.add(pq.poll());
        }

而不是 List StudentList = new ArrayList(pq);帮助将 PQ 的确切顺序复制到列表中。


比较器的一般结构应该是: 比较一个字段;如果字段值不同,则返回;如果它们相同,则继续到下一个字段。

在这种情况下,它可能看起来像:

int cmp;

cmp = Double.compare(other.getCgpa(), this.getCgpa());
if (cmp != 0) return cmp;

cmp = this.getName().compareTo(other.getName());
if (cmp != 0) return cmp;

cmp = Integer.compare(this.getId(), other.getId());
if (cmp != 0) return cmp;

return 0;

(最后if and return可以折叠成仅return cmp;;但我认为如果你按照上面的方法做,以后扩展会更容易,因为你可以插入另一个cmp/if.)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我的类似界面逻辑有什么问题? 的相关文章

随机推荐

  • 使用 html2canvas 进行屏幕捕获

    我正在打电话screenView 来自另一个班级 我可以调用它 但我没有得到strDataURI 我究竟做错了什么 function screenView var image var date new Date var message ti
  • 如何知道 WebBrowser 是否正在导航错误页面?

    例如 我们导航到http www ggg111 com 这是一个错误 URL 但在 WebBrowser 中它会显示一个错误页面 The webpage cannot be found HTTP 400 Most likely causes
  • 通过字符串比较检查动态对象类型

    检查基础对象 如果属于某种类型 的最佳方法是什么 myObject 可以具有 n 级别的层次结构 我想与字符串进行比较 因为 myObject 是动态的 并且我没有对车辆的程序集访问权限 a 汽车 车辆b 自行车 两轮车 车辆c 卡车 拖车
  • 什么在操作系统中强制执行内存保护?

    一般来说 我知道进程无法写入具有不允许写入保护的内存 在其地址空间中 但是什么来检查进程是否可以做到这一点呢 操作系统是否有汇编指令 它是如何工作的 在大多数现代 CPU Intel x86 大多数 ARM 版本 中 由 CPU 本身进行检
  • main 需要一个文件名作为第一个参数...但我也可以通过管道提供 main 文件...这是如何工作的?

    我有一个带有 main 函数的 C 程序 int main int argc char argv FILE f fopen argv 1 r 请注意 在执行程序时 它期望提供一个文件名作为第一个参数 例如 main test dat 当我这
  • 将html中带星号(*)的文本替换为angularjs中的指令

    我需要一个具有遮罩属性的文本区域控件 如果文本区域能够遮罩 则文本应显示为星号而不是实际文本 我的表单中可以有任何文本区域 因此我无法将实际文本保存在其他变量中 也无法保存实际文本区域的星星或点 有人可以帮我解决这个问题吗 正如其他人已经指
  • 可选类型“字符串?”的值未拆封;您的意思是使用“!”吗?或者 '?'?

    我在 Swift 中定义了一个类 如下所示 class RecordedAudio NSObject var title String var filePathUrl NSURL init title String filePathUrl
  • Matlab函数返回值

    我有一个程序 它具有功能和问题 返回值 它有太多输出 就像例子 y text 答案出现 Error in text line 2 if nargin 0 Output argument array and maybe others not
  • 如何发送异步URL请求?

    我想知道如何从 URL 请求异步获取仅返回值 1 或 0 目前我是这样做的 NSString UTCString NSString stringWithFormat http web blah net question CheckQuest
  • Powerpoint 中形状的存在

    我想在启用宏的 powerpoint 演示文稿上的命令按钮上建立一个条件 如果该形状存在 那么我希望将其删除 否则按钮应该生成一个关于不存在这样的形状这一事实的声明 目前我的生存遇到了麻烦 如何让 Power point 识别形状为空 这是
  • 以编程方式查找 VS2017 最近使用的 (MRU) 解决方案和项目

    我知道 Visual Studio 2017 现在支持所有 SKU 企业版 专业版和社区版 的无注册表 并行安装说明here 我们需要访问 VS2017 最近使用的 MRU 解决方案和项目的列表 对于之前的 VS2017 版本 我们过去常常
  • 使用Python获取字符的unicode代码点

    在Python API中 有没有办法提取单个字符的unicode代码点 Edit 如果有必要的话 我使用的是 Python 2 7 如果我正确理解你的问题 你可以这样做 gt gt gt s gt gt gt s encode unicod
  • MATLAB:如何读取文本文件的每第N行?

    我有一些数据 格式如下 dtau E av variance N sims Time 0 001 0 497951 0 000211625 25 Sun Apr 3 18 18 12 2011 dtau E av variance N si
  • 如何以编程方式将 XmlNode 添加到 XmlNodeList

    我有一个产品的 XmlNodeList 其值放入表中 现在 我想在找到某个产品时向列表添加一个新的 XmlNode 以便在同一循环中将新产品视为与文件中最初的项目相同 这样函数的结构不需要改变 只需添加一个接下来要处理的额外节点即可 但 X
  • 如何通过 Drive API(PHP 客户端)创建公共 Google 文档

    这就是我到目前为止所得到的 通过结合this and this require once google api php client src Google Client php require once google api php cli
  • 如何在android中获取sdcard中所有可用的图像文件? [复制]

    这个问题在这里已经有答案了 可能的重复 如何从模拟器的sdcard中获取所有图片并将其显示在listView中 我的sdcard下有很多文件夹 每个文件夹包含图像文件 文本文件和子文件夹 如何获取 SD 卡下所有文件夹和子文件夹中的所有可用
  • 如何在驱动模块中使用 seq_file 实现可写的 proc 文件

    在书中Linux 设备驱动程序第三版 proc文件系统作为输出方式 导出某个设备驱动程序的运行状态 然而 在某些情况下 proc文件系统用作更改驱动模块内部参数的一个接口 我用谷歌搜索了很多 发现互联网上的一些实现太旧了 他们使用creat
  • 如何创建 bash 脚本来检查 SSH 连接?

    我正在创建一个 bash 脚本 该脚本将登录远程计算机并创建私钥和公钥 我的问题是远程机器不是很可靠 而且它们并不总是处于运行状态 我需要一个 bash 脚本来检查 SSH 连接是否已启动 在实际创建密钥以供将来使用之前 您可以使用 ssh
  • Perl:解释如何使用“uni::perl”模块 - 加载编译指示和其他模块

    In my 上一个问题我问如何一次使用多个模块 拿到一个完美的答案 and 另一个是什么给我指出了现代 Perl模块什么的 其实很简单 经过一番搜索 CPAN 我发现了另一个名为大学 perl 真正复杂的是 它相当于 use strict
  • 我的类似界面逻辑有什么问题?

    所以问题如下 为每个进入队列的学生分配一个唯一的 ID 队列根据以下标准 优先级标准 为学生提供服务 首先服务的是累积平均绩点 CGPA 最高的学生 任何具有相同 CGPA 的学生都将按姓名按升序区分大小写的字母顺序排列 任何具有相同 CG