【问题标题】:Selection Sort Strings选择排序字符串
【发布时间】:2015-05-03 11:35:00
【问题描述】:

我阅读了一个包含城市及其人口的文件,并尝试使用选择排序按字母顺序对城市进行排序。 问题是由于某种原因它以一种奇怪的方式对其进行排序。 “排序”列表的顺序是“ABDCEFHG ...”我尝试关注它,但我不明白它在哪里搞砸了。这是代码:

    //Selection
    for (int i = 0; i < cities.size() - 1; i++) 
    {
        int minPos = i;
        for (int j = i + 1; j < cities.size(); j++) 
        {
            if (cities.get(j).compareToIgnoreCase(cities.get(minPos)) < -1)
                minPos = j;
        }
        swap(cities, minPos, i);
    }
    System.out.print("\nSelection: ");
    for(int i = 0; i < cities.size(); i++)
        System.out.print(cities.get(i) +"|");

private static void swap(ArrayList <String> a, int i, int j) 
{
    String temp = a.get(i);
    a.set(i, a.get(j));
    a.set(j, temp);
}

知道有什么问题吗?

谢谢

【问题讨论】:

  • 你试过用... &lt; 0代替... &lt; -1吗?
  • 你为什么使用
  • 是的,这就是问题所在。这是我第一次使用字符串比较,所以我对它有点陌生。谢谢!
  • 欢迎您。我建议您阅读 compareTo 方法的 javadoc,以便您完全了解发生了什么。

标签: java string sorting selection-sort


【解决方案1】:

正如其他人所提到的,您的问题几乎可以肯定是您的... &lt; -1 比较,这在比较器的上下文中基本上没有意义。正如Comparable 中所述,Java 中的比较通常通过返回来完成

负整数、零或正整数,因为此对象小于、等于或大于指定对象。

String.compareToIgnoreCase() 遵循相同的规则:

Returns:
    a negative integer, zero, or a positive integer as the specified
    String is greater than, equal to, or less than this String, ignoring
    case considerations.

这些合约故意没有说明这些负数或正数可能是什么,因此实现可以做任何最简单的事情。许多实现将显式返回-101,但其他实现,包括String 中的实现,使用减法作为快捷方式,返回被比较项目之间的差异,例如x.compareTo(y)return x-y。如果xy相同,则结果为0,否则x较小则返回负数,x较大则返回正数。

简而言之,您必须始终使用0 作为比较点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 2016-03-26
    • 1970-01-01
    • 2014-06-13
    • 2023-03-03
    • 2011-07-27
    • 2021-03-17
    相关资源
    最近更新 更多