0

このプログラムは準拠していますが、正常に実行されません。バグを見つけることができません。

public class Q1 {
    public static void main(String[] args) {
        StringBuffer[]stringBuffers = new StringBuffer[10];

        for(int i =0; i< stringBuffers.length;i++){
            stringBuffers[i].append("StringBuffer at index " + i);
        }
    }
}
4

4 に答える 4

6

を初期化しませんstringbuffers

あなたは次のようなものを持っている必要があります

for(int i =0; i< stringBuffers.length;i++){
   stringBuffers[i] = new StringBuffer();

また

for(int i =0; i< stringBuffers.length;i++){
   stringBuffers[i] = new StringBuffer("StringBuffer at index " + i);
于 2012-10-16T10:15:00.900 に答える
2

StringBuffer を初期化する必要があります。

public class Q1 {
public static void main(String[] args) {
    StringBuffer[]stringBuffers = new StringBuffer[10];

    for(int i =0; i< stringBuffers.length;i++){
        stringBuffers[i]= new StringBuffer();
        stringBuffers[i].append("StringBuffer at index " + i);
    }
}
}
于 2012-10-16T10:18:08.400 に答える
1

ステートメントの中で:

StringBuffer[]stringBuffers = new StringBuffer[10];

これで、10個の要素の配列が作成されました。ただし、要素は含まれていません。この配列の各要素はまだ空であり、デフォルトでは。が含まれていますnull

だからあなたが電話したとき

stringBuffers[i].append("StringBuffer at index " + i);

ここで stringBuffers[i]はまだ初期化されておらず、を指していnullます。

だからそれは与えていますjava.lang.NullPointerException.

他の回答で述べられているように、あなたがこれを好きなら:

for(int i =0; i< stringBuffers.length;i++){
   stringBuffers[i] = new StringBuffer();

これにより、stringBuffer配列の各要素が、StringBufferオブジェクトへの参照で初期化されます。したがって、stringBuffer[i]は空ではなくなります。


ちなみに、StringBuilderを使用する必要があります。StringBufferとStringBuilderはどちらも、変更可能な文字列を提供します。StringBufferは、アプリケーションがマルチスレッド環境で実行されている場合にのみ使用してください。パフォーマンスのオーバーヘッドが発生するためです。

于 2012-10-16T14:43:11.923 に答える
1

StringBuffer必要な文字列で配列内のオブジェクトを初期化する必要があります: -

for(int i =0; i< stringBuffers.length;i++){
    stringBuffers[i] = new StringBuffer("StringBuffer at index " + i);

}
于 2012-10-16T10:17:34.240 に答える