所以我是第一次学习Java。下面的代码在另一个类中调用square.toString()时抛出一个NullPointer异常(其中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;
}
}发布于 2013-03-03 06:07:35
当您试图在空对象上使用方法时,就会出现NullPointerException。在构造函数中,应使用以下表达式初始化parts数组
parts = new String[whateverSizeYouWant];
我不清楚你对这个数组做了什么。
发布于 2013-03-03 05:58:05
不清楚为什么你要声明一个名为parts的实例变量,然后在toString()中取消引用(parts[0] = ...) --但是你从来没有初始化它,所以值是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-03 05:58:14
你的问题结构不正确,但是我猜你在toString()方法中得到了一个NPE。原因是您从未在代码中真正初始化数组String[] parts;。
您必须先对其进行初始化:
public SquareBuilder(int firstSize)
{
size = firstSize;
this.parts = new int[give the size here];
}https://stackoverflow.com/questions/15179886
复制相似问题