1

所以我是第一次学习Java。以下代码在另一个类中调用NullPointer时会引发异常square.toString()(其中 square 是此类中定义的对象的实例),我对为什么这不起作用有点模糊。有人可以向我解释吗?

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

当您尝试对空对象使用方法时会出现 NullPointerException。您应该在构造函数中parts使用表达式初始化数组

parts = new String[whateverSizeYouWant];

我不清楚你在用数组做什么。

于 2013-03-02T22:07:34.523 回答