0

ファイルから辞書の単語のリストを読み取るプログラムを作成する必要があります。続いて、各単語の文字がアルファベット順に並べられ、元の配列に格納されます。(例: バットマンは aabmnt になります)。さて、これまでに行ったことは次のとおりです。

public static String[] alphabeticalOrder(String[] s)
{
    //
    // Sort each individual string element by alphabetical order
    //
    for (int i = 0; i < s.length; i++)
    {
        String wordSt = s[i];
        char[] word = wordSt.toCharArray();
        Arrays.sort(word);
        s[i] = new String(word);
    }
    return s;
}

main での呼び出しは次のとおりです。String[] alphaOrder = alphabeticalOrder(dictionary);

ただし、プログラムを実行するたびにエラーが発生し、そのNullPointerException理由がわかりません。

に変更s[i]するとs[0]、エラーをスキップできましたが、最初の要素だけでなく、文字列内のすべての要素を変換する必要があります。

何がうまくいかないのですか?

4

3 に答える 3

1

これは、Zavior がコメントしたように、文字列配列に null 要素がある場合にのみ発生します。

コードを次のように変更します。

public static String[] alphabeticalOrder(String[] s)
{
    //
    // Sort each individual string element by alphabetical order
    //
    for (int i = 0; i < s.length; i++)
    {
        String wordSt = s[i];
        if(wordSt == null) continue;

        char[] word = wordSt.toCharArray();
        Arrays.sort(word);
        s[i] = new String(word);
    }
    return s;
}
于 2013-09-28T18:35:33.173 に答える
0

誰もが指摘したように、wordSt が null の場合、NullPointerException が発生する可能性があります。null に遭遇する可能性があるさらに別のポイントは、 String[] s 自体が null の場合です (まれですが可能性があります)。だから私は提案します-

public static String[] alphabeticalOrder(String[] s)
{
    if(s == null || s.length == 0) return s;
    for (int i = 0; i < s.length; i++) {
        if(s[i] != null) {
            char[] word = s[i].toCharArray();
            Arrays.sort(word);
            s[i] = new String(word);
        }
    }
    return s;
}

お役に立てれば。

于 2013-09-28T18:51:22.453 に答える
0

私が見たところNullPointerEception、渡されたString配列の要素の1つがnull. それをデバッグするには、呼び出す前に null チェックを行うだけですwordSt.toCharArray():

if (wordSt == null) {
    System.out.println("Null encountered at index: " + i + ". Skipping this element...");
    continue;
}
char[] word = wordSt.toCharArray();

これは、入力の何が問題なのかを把握するのに役立ち、これが予期されていない場合は、それを防ぐために必要な手順を実行します。

于 2013-09-28T18:31:18.820 に答える