【问题标题】:sort array of objects by surname java按姓氏对对象数组进行排序 java
【发布时间】:2013-11-03 08:40:37
【问题描述】:

我被困在下面这段代码上,我一直在尝试使用冒泡排序按姓氏对对象数组进行排序,然后将其打印出来。我哪里出错了,我该如何打印出来?这是我的代码

for(int i = 1; i < clipArray.length; i++) {
    for(int j = 0; j < clipArray.length; j++) {
        if(((clipArray[j].getSurname()).compareToIgnoreCase((clipArray[j+1].getSurname()))) {
            Clip temp = clipArray[j];
            clipArray[j] = clipArray[j+1];
            clipArray[j+1] = temp;
        }
    }
}

问题:必需的布尔值,找到 int

【问题讨论】:

  • 您在打印数组时遇到了什么问题?
  • 我看到的第一个问题是 clipArray[j+1] 将索引出数组(请参阅您的第二个循环)
  • 先告诉我们出了什么问题。提供一些输入和输出。 SO is not for code dumps。请描述您的问题、您为尝试解决问题所采取的步骤等。
  • 我该如何解决这个问题?
  • 那是因为compareToIgnoreCase 返回一个int。您需要将此结果与另一个整数(如&lt; 0)进行比较。

标签: java arrays sorting


【解决方案1】:

问题是String#compareToIgnoreCase 返回一个int,而您需要if 语句的boolean 结果。从它的javadoc:

退货

负整数、零或正整数,因为指定的字符串大于、等于或小于此字符串,忽略大小写考虑

所以,根据定义将该方法的结果与另一个数字进行比较。

if (clipArray[j].getSurname().compareToIgnoreCase(clipArray[j+1].getSurname()) < 0) {
    //...
}

此外,您的for 循环声明中还有另一个错误。它们应该是这样的:

for(int i = 1; i < clipArray.length; i++) {
    for(int j = 0; j < clipArray.length - 1; j++) { //spot the difference
        //...
    }
}

【讨论】:

  • 非常感谢我现在明白了!我遇到的最后一个问题是我无法打印排序数组
  • System.out.println(clipArray[].getSurname());
  • 完成数组排序后,创建一个新循环并打印出每个姓氏。
【解决方案2】:

你的比较器类

class SampleComparator implements Comparator<Clip> {
    @Override
    public int compare(Clip o1, Clip o2) {

           return o1.getSurname().compareToIgnoreCase(o2.getSurname());
   }
}

你的排序在这里

Arrays.sort(clipArray,new SampleComparator());

【讨论】:

  • -1:这是一个家庭作业。使用Arrays#sort 显然不是答案。
  • 这不是问题。为什么人们对此投赞成票?
【解决方案3】:

错误是因为

compareToIgnoreCase 返回非布尔值的 int 值。

返回一个负整数、零或一个正整数作为 指定的字符串大于、等于或小于此字符串, 忽略大小写。

如果只取布尔值。

【讨论】:

  • 那么我该如何修复它,以便它比较字符串,然后我可以按字母顺序对其进行排序?
【解决方案4】:

我假设您的 clipArray 填充了支持getSurname()-方法的对象。

compareToIgnoreCase 方法返回一个 int,因此您应该将它与您的 if-statement 中的值进行比较,例如

if(foo.compareTo(bar) > 0)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-25
    • 2020-11-03
    • 1970-01-01
    • 2019-05-06
    • 2015-07-08
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    相关资源
    最近更新 更多