1

だから私は初めてJavaを学んでいます。NullPointer次のコードは、が別のクラス(squareはこのクラスで定義されたオブジェクトのインスタンス)で呼び出されたときに例外をスローしsquare.toString()ます。これが機能しない理由については少しわかりません。誰かが私にそれを説明できますか?

public class SquareBuilder {

String box;
String[] parts;
final private String beam = "----";
final private String collumn = "|";
private int size;

public SquareBuilder(int firstSize)
{
    size = firstSize;

}

public static String repeatString(String s, int n) 
{   
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < n; i++) 
    {
        sb.append(s);
    }

    return sb.toString();
}

public void changeSize(int newSize)
{
    size = newSize;

}

public String toString( )
{
        parts[0] = repeatString(beam,size) + "\n";
        parts[1] = collumn + repeatString(" ",4*size-2) + collumn + "\n";
        box = parts[0] + repeatString(parts[1],size-2) + parts[0];
    return box;

}
}
4

3 に答える 3

3

と呼ばれるインスタンス変数を宣言した理由は不明ですが、-でparts逆参照(parts[0] = ...)しtoString()ますが、初期化することはないため、値はnull...したがって例外です。

なぜあなたの実装はただではないのですか?

public String toString( )
{
    String ends = repeatString(beam,size) + "\n";
    String middle = collumn + repeatString(" ",4*size-2) + collumn + "\n";
    return ends + middle + ends;
}

でオブジェクトを変更することは非常にtoString()珍しいことです。

于 2013-03-02T21:58:04.793 に答える
1

あなたの質問は適切に組み立てられていませんが、toString()メソッドでNPEを取得していると思います。String[] parts;理由は、コードで配列を実際に初期化したことがないためです。

最初に初期化する必要があります。

public SquareBuilder(int firstSize)
{
    size = firstSize;
    this.parts = new int[give the size here];

}
于 2013-03-02T21:58:14.117 に答える
0

nullオブジェクトでメソッドを使用しようとすると、NullPointerExceptionが発生します。partsコンストラクターで、式を使用して配列を 初期化する必要があります

parts = new String[whateverSizeYouWant];

アレイで何をしているのか、私にはわかりません。

于 2013-03-02T22:07:34.523 に答える