我一直在研究一个HuffmanCode程序,我想我今天早上已经完成了它。然而,我已经随机开始获得一个NullPointerException
,即使它今天早些时候工作得很好。下面是导致问题的方法:( port =树的左侧,star =树的右侧)
public void translate(BitInputStream input, PrintStream output) {
HuffmanNode tempRootRef = huffmanRootRef;
while(input.hasNextBit() || (tempRootRef.port == null && tempRootRef.star == null)) {
if(tempRootRef.port == null && tempRootRef.star == null) {
output.write(tempRootRef.charValue);
tempRootRef = huffmanRootRef;
} else if (input.nextBit() == 0){
tempRootRef = tempRootRef.port;
} else {
tempRootRef = tempRootRef.star;
}
}
}
我在第一个if语句中得到NullPointerException
:
Exception in thread "main" java.lang.NullPointerException
at HuffmanCode.translate(HuffmanCode.java:118)
at HuffmanCompressor.decompress(HuffmanCompressor.java:115)
at HuffmanCompressor.main(HuffmanCompressor.java:178)
我尝试检查类似问题的答案,但我无法理解它们。
假设huffmanRootRef具有非空值,那么该行中的NPE意味着input.hasNextBit()
返回true
,但tmpRootRef
是null
。
我建议跟踪你的代码(在调试器或几个打印语句中),以便在执行时观察值。