在String数组中排序2个字符串(Java)

时间:2011-12-08 17:09:50

标签: java arrays string sorting

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

  • 24悉尼
  • 22雅典
  • 22奥克兰
  • 20 Barcelona

--->这是排序代码。

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] && x[i] < x[i+1]) 我不能只将2个蜇与运算符>进行比较。我也不能使用任何现成的排序方法。

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

2 个答案:

答案 0 :(得分:4)

StringComparable,因此您可以使用s1.compareTo(s2)

有关详细信息,请参阅String.compareTo;它会返回负数,0或某些正数,这取决于s1是否按字典顺序排在s2之前,也就是说s1是否会在字典中的s2之前。

答案 1 :(得分:1)

目前实施的最接近的答案是G. Bach的;你应该通过他的答案来寻找一个简单的解决方案。

在盒子外思考一下......

你当前的实现有一个潜在的缺点,你的阵列可能会失去同步的索引,这些索引最终会导致错误城市的温度升高。你可以尝试一个自定义类型,它封装了两个fiels并有一个列表。有点像...

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

    ...
}

然后您的应用会将数据用作List<CityTemperatureInfo>。这将确保城市名称和温度始终位于列表中的相同位置。如果您使该课程具有可比性,您可以实施int compareTo(CityTemperatureInfo other)方法,该方法允许您在列表上进行简单的调用排序。

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