【问题标题】:Comparing variables of objects in an array?比较数组中对象的变量?
【发布时间】:2011-07-16 21:15:03
【问题描述】:

我有一个 Java 对象数组。假设这些对象 Obj 包含一个变量 var,并且我有几个 Obj 存储在一个数组 Array[] 中。

我想比较两个相邻 Obj 之间的 var,但我不知道如何,也无法在网上找到任何信息(这让我觉得我的问题是错误的,或者它不可行之类的)

编辑:

我目前正在尝试一种相当迂回的方法,将有问题的数组对象分配给新的临时对象,并与这些对象进行比较:

Obj o1 = o[i];
Obj o2 = o[i+1];

if (o1.var > o2.var)
//etc

但肯定有更好的东西。

【问题讨论】:

  • 你的代码已经很好了。我会完全这样离开它。例如,当您在调试时,变量中有有趣的东西,因此当您需要查看它们时,它们可能只需单击鼠标即可。这就是使用许多局部变量的美妙之处,即使这会使代码变长一点。

标签: java arrays object compare


【解决方案1】:

如果你有一个对象数组,你可以在不创建临时引用的情况下进行比较:

MyObject[] arr = //populated somehow
for (int index = 0; index < arr.length - 1; index++) {
  if (arr[index].var > arr[index + 1].var) {
    //your logic
  }
}

您可能还想查看Comparable 接口,作为封装基于特定字段的对象比较的一种方式。使用此接口可以让您利用它在Collections API 中的支持。

【讨论】:

  • (删除了我的评论:哎呀,你的代码真的是长度为 1!)
  • @poundifdef:他编辑了它,你的评论是正确的。我不敢相信这个答案被标记为正确。我的意思是,它会产生一个 ArrayOutOfBoundsException(在编辑之前)并且无论如何都不会编译(arr++???)。邋遢。哦,好吧。
【解决方案2】:

根据您的编辑,可以这么说

if (o[i].var > o[i+1].var) { ... }

假设o 的类型为Obj[]

不过,我很好奇:您是否要对数组进行排序?如果是这样,您可以使用Arrays.sort()(如果不是,无论如何这是一个了解的好方法。)

【讨论】:

    【解决方案3】:

    我可能没有正确理解您的问题,但以下是完全有效的:

    if (o[i].var > o[i+1].var )  { // ...etc... }
    

    当你到达数组的末尾时要小心!也就是说,如果您循环遍历所有元素并且i 是最后一个元素,那么o[i+1] 会给您一个数组索引超出范围错误!

    【讨论】:

      【解决方案4】:

      直接使用它们而无需引用,即将数组查找替换为您进行比较的位置。

      if (o[i].var > o[i+1].var) {
          // etc
      }
      

      或者在一个循环中,以编程方式完成每一件事:

      for (int i=0; i<o.length-1; i++) {
          if (o[i].var > o[i + 1].var) {
              // etc
          }
      }
      

      【讨论】:

      • 感谢大家的帮助。我已经尝试了解决方案:o[i].var > o[i+1].var 在创建这个线程之前一段时间并且收到了某种错误,但是在关闭所有东西之后,开始工作,回来,然后再试一次……它似乎奏效了。我不会担心第一次出了什么问题,只是会享受它的工作。
      猜你喜欢
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-30
      • 1970-01-01
      相关资源
      最近更新 更多