我一直在研究HuffmanCode程序,我以为我今天早上完成了它。但是,即使今天早些时候运行良好,我也开始随机获得NullPointerException
。下面是导致问题的方法:(端口=树的左侧,星形=树的右侧)
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)
我尝试查看类似问题的答案,但是我很难理解它们。
答案 0 :(得分:0)
假设huffmanRootRef具有非空值,则该行中的NPE意味着input.hasNextBit()
返回了true
,而tmpRootRef
是null
。
我建议在调试器中或通过几个打印语句来跟踪代码,以观察执行时的值。