2013-03-02 3 views
1

그래서 처음으로 Java를 배우고 있습니다. 다음 코드는 square.toString()이 다른 클래스에서 호출 될 때 NullPointer 예외를 발생시킵니다 (square는이 클래스에서 정의 된 객체의 인스턴스 임). 그리고 이것이 작동하지 않는 이유에 대해서는 약간 안개가 듭니다. 누군가 나에게 설명해 줄 수 있니? 당신이 예를 변수가 parts라고 선언 한 이유"java.lang.NullPointerException"처리

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; 

} 
} 
+3

예외의 전체 스택 추적은 무엇입니까? – Jeffrey

답변

0

NullPointerException가 제공됩니다. 당신은 당신의 생성자에서, 표현 당신이 배열로 무엇을하는지 나에게 분명하지 않다

parts = new String[whateverSizeYouWant];

를 사용하여 parts 배열을 초기화해야한다.

2

이 불분명 한 당신이 다음 역 참조 (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()에서 개체를 수정할합니다 :

이유는 단지 구현되지 않습니다.

+0

나는 어떤 이유로 뇌에 배열을 가지고 있었지만, 분명히 그것들을 사용할 이유가 없었습니다. 감사. – user2127595

1

귀하의 질문에 제대로 프레임되지 않습니다, 그러나 당신은 귀하의 toString() 메서드에서 NPE를 받고있는 것 같아요. 이유는 코드에 배열 String[] parts;을 초기화하지 않았기 때문입니다.

는 먼저 초기화해야한다 : 당신이 null 객체에 방법을 사용하려고 할 때

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

}