해시 테이블을 사용하여 사전을 구현하려고합니다. Java 제공 해시 테이블 클래스를 사용하지 않고 처음부터 작성했습니다. 다음은 삽입/제거 할 때 키가 테이블에 있는지 여부를 감지하는 데 사용되는 My Dictionary 클래스의 find()
메서드입니다. 키가 이미 표에있는 경우 키와 관련된 점수를 반환합니다 (표의 요소는 각 표 위치의 LinkedLists에 키/점수 쌍으로 삽입됩니다). 그렇지 않으면 -1을 반환합니다.이 배열이 널 포인터 예외를주는 이유는 무엇입니까?
내 사전 클래스가 작동하는지 확인하기 위해 제공된 테스트 프로그램을 실행하고 있지만 특정 지점에 도달하면 NullPointerException
이 발생합니다. 아래에는 특정 테스트가 포함되어 있습니다. 이 예외가 왜 나오겠습니까? (필요한 경우 나는 더 많은 코드를 제공 할 수 있습니다!)
찾기 :
public int find(String config) {
for (int i = 0; i < dictSize; i++) {
if (dict[i] != null) {
LinkedList<DictEntry> current = dict[i];
String currentConfig = current.peek().getConfig(); //Dictionary.java:66
if (currentConfig.equals(config)) {
int currentScore = current.peek().getScore();
return currentScore;
}
}
}
return -1;
}
삽입 :
public int insert(DictEntry pair) throws DictionaryException {
String entryConfig = pair.getConfig();
int found = find(entryConfig); //Dictionary.java:27
if (found != -1) {
throw new DictionaryException("Pair already in dictionary.");
}
int entryPosition = hash(entryConfig);
if (dict[entryPosition] == null) { //Dictionary.java:35
LinkedList<DictEntry> list = new LinkedList<DictEntry>();
dict[entryPosition] = list;
list.add(pair);
return 0;
} else {
LinkedList<DictEntry> list = dict[entryPosition];
list.addLast(pair);
return 1;
}
}
테스트 :
// Test 7: insert 10000 different values into the Dictionary
// NOTE: Dictionary is of size 9901
try {
for (int i = 0; i < 10000; ++i) {
s = (new Integer(i)).toString();
for (int j = 0; j < 5; ++j) s += s;
collisions += dict.insert(new DictEntry(s,i)); //TestDict.java:69
}
System.out.println(" Test 7 succeeded");
} catch (DictionaryException e) {
System.out.println("***Test 7 failed");
}
예외 스택 추적 :
Exception in thread "main" java.lang.NullPointerException
at Dictionary.find(Dictionary.java:66)
at Dictionary.insert(Dictionary.java:27)
at TestDict.main(TestDict.java:69)
예외 스택 추적도 게시하십시오. – sakthisundar
및 삽입 방법 코드 – zaffargachal
'dict'이란 무엇입니까? –