각 문자의 수를 계산하는 객체 클래스를 작성하고 테스트 코드를 실행할 때 "abc"가 전달되었을 때 널 포인터 예외를 표시합니다. 이유를 파악할 수 없습니다 . 테스트 코드는 오류가 없지만 객체 클래스에는 실수가 있습니다.이 특정 널 포인터 예외를 해결하는 방법
public class LetterInventory {
private static final int COUNTER = 26;
private int size = 0;
private int[] inventory;
public LetterInventory() {
inventory = new int [COUNTER];
}
public LetterInventory (String data) {
data = data.toLowerCase();
for(int i = 0; i < data.length(); i++) {
int charPosition = data.charAt(i) - 'a';
if(charPosition >= 0 && charPosition < COUNTER) {
inventory[charPosition]++;
size++;
}
}
}
수정 프로그램은 모든 NPE에 대해 동일합니다 : 널 (null) 무엇을 파악하고 null이 아닌 참조에 할당합니다. 스택 추적은 파일을 생성 한 파일의 행 번호를 알려줍니다. 그게 충분히 좋은 힌트가 아닐까요? – duffymo
NPE는 어디에 있습니까? –
글쎄, 하나의 생성자에서'inventory'를 초기화하고 다른 생성자에서 사용하는 것은 그리 똑똑하지 않습니다. 둘 다 호출 할 수 없으므로 아무 것도 세지 못하거나'인벤토리 '가'null'로 남습니다. – Tom