2

これはかなり基本的なJavaの質問です

java.util.Arrays.sort を使用してソートしたい文字列を含む配列があります

私が書くとき

String[] myArray = {"A","B","C"};
java.util.Arrays.sort(myArray);

正しくソートされます

しかし、私が持っているとき

String[] myArray = new String[10];
myArray[0] = "A";
myArray[1] = "B";
myArray[2] = "C";

java.util.Arrays.sort(myArray);

sort は nullreferenceexception をスローします

私はそれが本当にばかげていると確信しています。今はわかりません。ハードコーディングされたデフォルト値は誰にもどこにも届かないため、文字列を新しくする必要があります。

4

9 に答える 9

7

2 番目の配列を初期化するときは、最初の 3 つの要素のみを初期化します。他の要素は null に初期化されるため、並べ替えることができません。

于 2009-02-02T04:28:24.220 に答える
3

次のようにして、最初の 3 つの要素だけを並べ替えます。

Arrays.sort(myArray, 0, 3);
于 2009-02-02T08:47:11.453 に答える
3

ソースでは、メソッドは compareTo() を並べ替え条件として使用します。明らかに、 nullでcompareTo() を呼び出すと、NullPointerException が発生します。Java Docs で言及されているように、

配列内のすべての要素は相互に比較可能でなければなりません (つまり、e1.compareTo(e2) は、配列内の要素 e1 および e2 に対して ClassCastException をスローしてはなりません)。

もちろん、ここでは ClassCastException についてではありませんが、comapreTo() の呼び出しは明らかです。

【編集済】

PS例外スタックトレースからこれを理解することが最善の策です。

于 2009-02-02T04:46:54.650 に答える
1

10 個の要素を格納するようにしているためmyArray、(効果的に) 最後に 7 個の null が追加されArrays.sort()、文字列に対して null 要素を並べ替えることができないと思います。

于 2009-02-02T04:28:36.870 に答える
1

最初に配列を作成したときにそこにあるヌル文字列では機能しません。明示的にすべてを "" にするか、必要なだけ割り当てることを避けるために。

これがAPIレベルでのミスなのかどうかはわかりませんが、nullオブジェクト(SQLオーダーバイで取得する方法)に対応できた可能性があるため、それ以上のものがあります.

于 2009-02-02T04:37:03.657 に答える
1

何が起こるかというと、10 個の項目を持つ配列がある場合、他の項目は初期化されていません。そのため、ソート アルゴリズムが機能すると、文字列の値を取得しようとしますが、代わりに何も取得せず、例外をスローします。

配置するものよりも多くのスペースを持つ配列をソートしようとしないようにする必要があります。

于 2009-02-02T04:28:35.280 に答える
0

配列サイズを 10 で定義しますが、3 つのインデックスのみを初期化します。配列サイズを 3 に変更するか、10 個すべてを初期化します。

于 2009-02-02T04:29:23.330 に答える
0

配列には 10 個の項目がありますが、内部には 3 つしか入れません。したがって、残りの 7 は NULL です。代わりに ArrayList の使用を検討してください。

于 2009-02-02T04:30:29.613 に答える
-1

10 ではなく 3 つの要素があるため、配列リストを使用する必要があります。

配列の他の 7 つの要素は null 値になります。

並べ替え時に Null ポインターの問題を引き起こすのは、これらの null 値です。

于 2015-10-05T04:34:15.247 に答える