选择排序问题

时间:2016-12-12 16:47:10

标签: java selection-sort

我遇到以下代码的问题,我尝试输入单词列表(Alpha,delta,Charlie,beta)并对它们进行排序;然而,该列表首先对所有大写字母进行排序,然后对小写字母(Alpha,Charlie,beta,delta)进行排序,即使我只是希望它按字母顺序排序,即 - > (Alpha,beta,Charlie,delta)

请在下面找到我的选择代码:

public void sortPokemon()
    {
    Pokemon temp;
    for(int i = 1; i < amount; i++){
        for(int j = i; j > 0; j--){
            if(pokemon[j].getSpecies().compareTo(pokemon[j-1].getSpecies()) < 0){
                    temp = pokemon[j];
                    pokemon[j] = pokemon[j-1];
                    pokemon[j-1] = temp;
                }
            }
        }
    }   

4 个答案:

答案 0 :(得分:0)

您可以实现比较器,在那里,您可以将字符串与忽略的情况进行比较,例如:

public class IgnoreCaseComparator implements Comparator<String> {
    public int compare(String s1, String s2) {
         return s1.toLowerCase().compareTo(s2.toLowerCase());
    }
}

或者您可以将字符串放在地图中(可能是TreeMap),键是小写(或上部)字符串,value是您的原始字符串。

请注意,地图方式不允许使用相同的密钥。

答案 1 :(得分:0)

String.compare也要尊重这个案子。你可以让Pokemon实现Comparable这样的东西:

public class Pokemon implements Comparable<Pokemon> {
    // you other methods here

    @Override
    public int compareTo(Pokemon p) {
        return this.getSpecies().toLowercase().compareTo(p.getSpecies().toLowercase());
    }
}

然后你可以像这样进行直接比较:

if(pokemon[j].compareTo(pokemon[j-1])) 

您也可以使用自定义比较器。

答案 2 :(得分:0)

您可以尝试以下代码(编辑if statement)使用     compareToIgnoreCase()类中定义的String.java方法。该方法从java 1.2开始提供。

if(pokemon[j].getSpecies().compareToIgnoreCase(pokemon[j-1].getSpecies()) < 0)

请注意,使用compareTo()方法并将字符串大小写转换为循环中的上限或下限将成为使用字符串的性能明显不好的方法。但是使用其他方法也是如此,这些方法是使Pokemon类实现Comparable接口并从compareTo方法返回适当的值。类扩展Comparator的情况也是如此

答案 3 :(得分:0)

由于所有输入都是字符串数据类型,因此您可以使用java库中存在的忽略大小写的内置方法轻松对它们进行排序。