2

String[]整数値で降順で並べ替える必要があります。配列の内容は文字列または整数のいずれかである可能性があるため、String[]を使用しています。

降順で並べ替えるには、

Arrays.sort(rows, Collections.reverseOrder());

行には"14","0","3";が含まれます

string []に単語が含まれている場合、並べ替えは正常に機能します。

Collections.reverseOrder()これはプリミティブ型では機能しないと読みましたが、使用しているので、使用String[]していないので、これはそのカテゴリに分類されますint[]か?

もしそうなら、forループを使用する以外のソートメカニズムはありますか?

4

4 に答える 4

2

要件は非常に具体的で珍しいものです。もちろん、そのための標準的な方法はありません。ただし、カスタムコンパレータを提供することもできます。

Arrays.sort(rows, new Comparator<String>()
{
    public int compare(String o1, String o2)
    {
         return Integer.parseInt(o2) - Integer.parseInt(o1);
    }
});

また、文字列に解析できない整数が含まれている場合の対処方法を決定し、を処理する必要がありNumberFormatExceptionます。

于 2013-03-01T11:45:03.323 に答える
1

問題は、文字列の自然な順序が数字の順序と同じではないことです。"1" < "11" < "2"とは対照的1 < 2 < 11です。それはあなた自身のコンパレータを書くことの問題です:

    Arrays.sort(rows, new Comparator<String>() {
        public int compare(String o1, String o2) {
            return -(Integer.parseInt(o1) - Integer.parseInt(o2));
        }
    });

-各文字列の整数値を使用します(いずれかの文字列が整数でない場合はクラッシュします) 。通常の値を返すため、逆の順序になります。また、すべての比較ですべての文字列を解析するため、非効率的です。

于 2013-03-01T11:46:08.417 に答える
0

番号順に並べ替える場合は、ではなく数値タイプが必要ですString。の配列を作成してInteger並べ替えることができます。

于 2013-03-01T11:45:32.003 に答える
0

並べ替えは、アルファベット順の文字列を使用して行われます。"3"文字が文字よりも大きい"14"ため、文字列はより大きく'3'なります'1'(逆の順序で)。

独自のコンパレータを渡す必要があります。ウィッチは、文字列を比較する前に文字列をインターガーに変換するか、インターガーのフォーマセットを使用して、同じ桁数と先頭になり0ます。

同じ配列に文字列として数字が含まれている場合、数字の順序で数字を取得することはできません。

于 2013-03-01T11:47:04.803 に答える