【问题标题】:Sorting 2 strings inside a String array (Java)对字符串数组中的 2 个字符串进行排序(Java)
【发布时间】:2011-12-08 17:09:49
【问题描述】:

我有两个数组,一个用于温度,一个用于城市。如果两个温度相同,则相应的城市必须按字母排序顺序显示。例如

  • 24 悉尼
  • 22 雅典
  • 22 奥克兰
  • 20 巴塞罗那

--->这是排序代码。

public static void sort(String[] x , double[] y) {
    boolean doMore = true;

    while(doMore) {    
        doMore = false;  

        for(int i=0; i< x.length-1; i++) {    
            if(y[i] == y[i+1] && x[i] < x[i+1]) {    
                String temp2 = x[i];
                x[i] = x[i+1];
                x[i+1] = temp2;    
            } else if (y[i] < y[i+1]) {    
                double temp = y[i];    
                y[i] = y[i+1];    
                y[i+1] = temp; 

                String temp2 = x[i];        
                x[i] = x[i+1];    
                x[i+1] = temp2;    
                doMore = true;    
            }//if    
        }//for 2    
    }//while    
}// sort */

问题在于if(y[i] == y[i+1] &amp;&amp; x[i] &lt; x[i+1]) 我不能只用操作员&gt; 比较 2 次蜇伤。我也不能使用任何现成的排序方法。

有人知道如何按字母顺序对字符串进行排序吗?

【问题讨论】:

  • 你不能用compareTo吗?例如。 if(str1.compareTo(str2) &gt; 0)
  • 不,我们不应该使用任何现成的方法。因此我们必须自己编写代码。

标签: java arrays string sorting


【解决方案1】:

StringComparable,所以你可以使用s1.compareTo(s2)

详情请见String.compareTo;它返回负数、0 或正数,这取决于 s1 在字典上是否在 s2 之前,也就是说 s1 在字典中是否会在 s2 之前。

【讨论】:

  • 您还应该向 OP 强调他正在尝试与 == 进行字符串比较。他也应该用您的 compareTo 或 string.equals() 替换那些。
  • @CPerkins 据我所知,OP 在比较双打时只使用 == 一次。
  • 你是对的 - 我对 x 和 y 感到困惑。我不再经常看到单字母变量名了。
  • 谢谢大家的回复。我终于用 s1.compareTo(s2) 覆盖了它,因为我找不到其他任何东西。
【解决方案2】:

与您当前的实现最接近的答案是 G. Bach 的;您应该查看他的答案以获得简单的解决方案。

跳出框框思考...

您当前的实现有一个潜在的缺点,即您的阵列可能会在索引方面不同步,这最终会导致错误城市的温度。您可以尝试一个自定义类型,它封装了这两个字段并列出了这些字段。比如……

public class CityTemperatureInfo implements Comparable<CityTemperatureInfo>
{
    public string cityName;
    public double temperature;

    ...
}

然后您的应用会将数据用作List&lt;CityTemperatureInfo&gt;。这将确保城市名称和温度在列表中始终位于同一位置。如果你让这个类具有可比性,你可以实现int compareTo(CityTemperatureInfo other) 方法,它可以让你对列表进行简单的调用排序。

通常,最好将相关数据放在一起以避免数据不同步的潜在问题。

【讨论】:

    猜你喜欢
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 2021-03-21
    • 2017-06-07
    相关资源
    最近更新 更多