IComparable CompareTo(),如何比较多个对象属性?

2024-04-22

我正在尝试比较对象的多个属性,但我的代码只能比较程度属性。在 Visual Studio 中调试时,我的代码似乎完全缺少 else 语句。我将不胜感激任何提示。

class Student : IComparable 
{
    private string fName;
    private string lName;
    private string deg;
    private int gra;

    public Student(string firstName, string lastName, string degree, int grade)
    {
        fName = firstName;
        lName = lastName;
        deg = degree;
        gra = grade;
    }

    public override string ToString()
    {
        string var = lName + ", " + fName + " (" + deg + ") Grade: " + gra;
        return var;
    }

    public int CompareTo(object obj)
    {
        Student newStudent = obj as Student;

        if (this.deg.CompareTo(newStudent.deg) == 1)
        {
            return 1;
        }
        else if (this.deg.CompareTo(newStudent.deg) != 1)
        {
            return -1;
        }
        else //this is what my code is ignoring and not ordering by firstname as well
        {
            if (this.fName == newStudent.fName)
            {
                return 0;
            }
            else if (this.fName != newStudent.fName)
            {
                return -1;
            }
            else
            {
                return 0;
            }
        }
    }
}

首先回答你的问题(为什么else部分永远不会被执行)已经得到回答,也就是说,条件的第三种可能性是1 or not 1.

如果您尝试按不同的属性排序,例如,如果我们首先要按程度排序,然后按fName那么我们可以实现 IComparer-

class Student : IComparer<Student>{

    /*
    codes
   */


    public int Compare(Student student1, Student student2)
   {
          if(student1.deg.Equals(student2.deg))  //if both degrees are same
          {
              return string.Compare(student1.fName , student2.fName); // then compare fName
          }
          else
              return string.Compare(student1.deg , student2.deg);


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

IComparable CompareTo(),如何比较多个对象属性? 的相关文章

  • 将复选框添加到 UniformGrid

    我正在尝试将复选框动态添加到 wpf 中的统一网格中 但看起来网格没有为它们分配足够的空间 所以它们都有点互相重叠 这就是我将它们添加到后面的代码中的方法 foreach string folder in subfolders PathCh
  • 如何使 Windows 窗体的关闭按钮不关闭窗体但使其不可见?

    该表单有一个 NotifyIcon 对象 当用户单击 关闭 按钮时 我希望表单不关闭而是变得不可见 然后 如果用户想再次查看该表单 可以双击系统托盘中的图标 如果用户想关闭表单 可以右键单击该图标并选择 关闭 有人可以告诉我如何使关闭按钮不
  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 从父类调用子类方法

    a doStuff 方法是否可以在不编辑 A 类的情况下打印 B did stuff 如果是这样 我该怎么做 class Program static void Main string args A a new A B b new B a
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • 如何在列表框项目之间画一条线

    我希望能够用水平线分隔列表框中的每个项目 这只是我用于绘制项目的一些代码 private void symptomsList DrawItem object sender System Windows Forms DrawItemEvent
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • 将自定义元数据添加到 jpeg 文件

    我正在开发一个图像处理项目 C 我需要在处理完成后将自定义元数据写入 jpeg 文件 我怎样才能做到这一点 有没有可用的图书馆可以做到这一点 如果您正在谈论 EXIF 元数据 您可能需要查看exiv2 http www exiv2 org
  • Github Action 在运行可执行文件时卡住

    我正在尝试设置运行google tests on a C repository using Github Actions正在运行的Windows Latest 构建过程完成 但是当运行测试时 它被卡住并且不执行从生成的可执行文件Visual
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • 如何在 VBA 中声明接受 XlfOper (LPXLOPER) 类型参数的函数?

    我在之前的回答里发现了问题 https stackoverflow com q 19325258 159684一种无需注册即可调用 C xll 中定义的函数的方法 我之前使用 XLW 提供的注册基础结构 并且使用 XlfOper 类型在 V
  • 实体框架 4 DB 优先依赖注入?

    我更喜欢创建自己的数据库 设置索引 唯一约束等 使用 edmx 实体框架设计器 从数据库生成域模型是轻而易举的事 现在我有兴趣使用依赖注入来设置一些存储库 我查看了 StackOverflow 上的一些文章和帖子 似乎重点关注代码优先方法
  • 需要哪个版本的 Visual C++ 运行时库?

    microsoft 的最新 vcredist 2010 版 是否包含以前的版本 2008 SP1 和 2005 SP1 还是我需要安装全部 3 个版本 谢谢 你需要所有这些
  • 控制到达非 void 函数末尾 -wreturn-type

    这是查找四个数字中的最大值的代码 include
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • 如何使用 std::string 将所有出现的一个字符替换为两个字符?

    有没有一种简单的方法来替换所有出现的 in a std string with 转义 a 中的所有斜杠std string 完成此操作的最简单方法可能是boost字符串算法库 http www boost org doc libs 1 46

随机推荐

  • Html:对于 Select multiple,仅提交一个值,但 .val() 返回两个值的数组

    渲染页面时 val 多重选择的设置为单个值 例如 my select box val 1 然后用户在多选框中选择附加值 提交表单时 仅提交新选择的值 而不提交先前设置的值 而在 Firefox 中调试时 val 函数返回一个包含两个值的数组
  • Vuejs $emit 不会在回调时触发

    在下面的代码中 export default props note methods remove NoteRepo remove this note err gt if err console log Should Fire this em
  • 源和目标具有不同的 EABI 版本

    我正在尝试使用 ARM 工具链编译 so 文件 但是我不断收到这个错误 错误 源对象的 EABI 版本为 0 但目标对象的 EABI 版本为 5 我无法更改工具链中的任何内容 因为我必须使用给定的工具链 我以前从未见过这个错误 我使用了这个
  • “私人套餐”是什么意思? [复制]

    这个问题在这里已经有答案了 请看示例 private package com xm aws import static com xml aws PcgTest test public class PackageTest public sta
  • 比较 timespec 值

    比较两个 timespec 值以查看哪个先发生的最佳方法是什么 下面这句话有什么问题吗 bool BThenA timespec a timespec b Returns true if b happened first b will be
  • 按索引列和行对 data.table 进行子集化

    我希望通过更改列的索引来递归地对数据表进行子集化z并且同时根据某些条件过滤行 in 基向量 dt lt setDT copy diamonds dt lt setDT data frame lapply dt as character st
  • Azure EventGrid Webhook 超时

    从文档中得知 webhook 的超时时间为 60 秒 如果是这样的话 那么我们是否期望开发人员进行异步操作 我的意思是 如果我想要作为 Webhook 的一部分完成的工作需要超过 60 秒怎么办 但是 如果我们将该操作设为异步 并且我想要作
  • 使用 Python 绑定在 Selenium 中发送键控制 + 单击

    我需要使用 Selenium 在新选项卡中打开链接 那么是否可以在 Selenium 中对元素执行 ctrl click 以在新选项卡中打开它 Use an ActionChain with key down按控制键 然后key up释放它
  • 使用 iPhone 作为热点时 TCP 连接无法正常工作

    我正在开发一个 iOS 应用程序 它通过 TCP 套接字连接到在 Android 上运行的服务器应用程序 为了找到第二个设备的 IP 我使用 UDP 请求并接收服务器的 IP 当我将它们连接到 Wi Fi 网络或使用 Android 设备作
  • 如何判断当前应用程序是否为中等信任

    我试图确保我的 ASP Net 库能够在中等信任下工作 然而 我遇到了问题 因为如果代码在中等信任度下运行 我需要禁用一些代码 如何从 C 确定当前应用程序是否为中等信任 具体来说 我正在尝试从 web config 读取 customEr
  • Angularjs JSONP 不工作

    我可能在这里遗漏了一些东西 但我无法使这个 JSONP 请求工作 这里是代码 var url http server callback JSON CALLBACK http jsonp url success function data c
  • AIRFLOW:在 jinja 模板中为 {{ds}} 使用 .replace() 或relativedelta()

    我的目标是根据气流宏变量 ds 返回上个月的第一天并使用它 例如在 Hive 操作符中 例如 对于 ds 2020 05 09 我预计返回 2020 04 01 我找到并尝试的解决方案是 SET hivevar LAST MONTH ds
  • 是否应该重构此 C# 代码以使用 Lazy 类?

    我有以下代码 可以在同一秒通过多个网络请求调用 因此 我不希望第二个以上请求访问数据库 而是等到第一个请求访问数据库 我应该重构它以使用Lazy
  • 如果在 Woocommerce 中购买了特定产品,则会向特定地址发送电子邮件通知

    我在我的 WordPress 网站中使用 woocommerce 插件 我想知道如何向特定地址电子邮件发送电子邮件通知 如果产品A由客户购买 在 Woocommerce 中购买特定产品时如何向特定地址发送电子邮件通知 当在订单项中找到特定定
  • 添加新字段或更改所有 Firestore 文档的结构

    考虑一个集合users 集合中的每个文档都有name and email作为字段 users uid1 name Alex Saveau email email protected cdn cgi l email protection ui
  • 是否可以使函数接受给定参数的多种数据类型?

    编写函数时 我必须声明输入和输出数据类型 如下所示 int my function int argument 是否可以声明我的函数接受 int bool 或 char 类型的变量 并且可以输出这些数据类型 non working examp
  • 从 firestore 集合中引用的文档访问数据

    我在 firestore 数据库中有一个集合 其中包含多个数据字段和引用 结构如下 FirstCollection 文档样本 name parent more fields second reference to document from
  • 如何使用(不安全)别名?

    Rust 有严格的别名规则 但如果 我知道自己在做什么 我可以解决这些问题吗 我试图将一个 C 函数转换为 Rust 该函数通过从输入缓冲区读取并写入目标缓冲区来执行复杂的操作 但它有一个巧妙的优化 允许输入和输出缓冲区相同 foo src
  • 尽管已经安装了 python 模块,但仍无法导入它们

    我已经安装了两个plotly express and pandas using pip install plotly express and pip install pandas 我尝试使用以下命令将这些模块导入到我的程序中 import
  • IComparable CompareTo(),如何比较多个对象属性?

    我正在尝试比较对象的多个属性 但我的代码只能比较程度属性 在 Visual Studio 中调试时 我的代码似乎完全缺少 else 语句 我将不胜感激任何提示 class Student IComparable private string