【发布时间】:2014-09-15 16:21:29
【问题描述】:
我遇到了一个问题。我使用了一个 IdentityHashMap。我将这些条目放入其中 {150=1, 79=3, 345=6, 88=5, 50=4, 3=7, 24=2}。当键为 50、150 时,我尝试获取它们的值.但我得到了 java.lang.NullPointerException。我不知道为什么。请帮我修复它。非常感谢。
这是我的代码:
import java.util.IdentityHashMap;
import java.util.Arrays;
public class HelloWorld {
public static int[] twoSum(int[] numbers, int target) {
int[] result = new int[2];
if (numbers == null || numbers.length < 2) {
return result;
}
IdentityHashMap<Integer, Integer> map = new IdentityHashMap<Integer, Integer>();
for (int i = 0; i < numbers.length ; i++) {
map.put(numbers[i], i+1);
}
Arrays.sort( numbers );
int head = 0;
int tail = numbers.length - 1;
while (head < tail) {
if (numbers[head] + numbers[tail] == target) {
result[0] = map.get( numbers[head] );
result[1] = map.get( numbers[tail]i );
return result;
} else if (numbers[head] + numbers[tail] < target) {
head++;
} else {
tail--;
}
}
return result;
}
public static void main(String[] args) {
int[] sorce = {150,24,79,50,88,345,3};
twoSum(sorce, 200);
}
}
【问题讨论】:
-
NPE 被抛出哪一行?这也编译吗? --- 结果[1] = map.get( numbers[tail]i );
-
为什么要使用
IdentityHashMap?此外,您的方法修改了传入的numbers变量 - 这有点奇怪。 -
numbers[tail]i应该是什么? -
这段代码中没有任何东西可以抛出
NullPointerException。 -
@njzk2 这完全是个谎言!任何人都应该清楚,至少
result[x] = map.get( ... )可以抛出NPE,因为result是int[]。
标签: java nullpointerexception hashmap