나는 허프만 encodoing 트리 코딩 오전 및 오류가 나타납니다.StackOverFlow 오류/재귀 호출
5:1
5:4
5:2
5:1
5:4
5:2
5:1
5:4
5:2
5:1
Exception in thread "main" java.lang.StackOverflowError
at sun.nio.cs.SingleByteEncoder.encodeLoop(SingleByteEncoder.java:130)
at java.nio.charset.CharsetEncoder.encode(CharsetEncoder.java:544)
at sun.nio.cs.StreamEncoder.implWrite(StreamEncoder.java:252)
at sun.nio.cs.StreamEncoder.write(StreamEncoder.java:106)
at java.io.OutputStreamWriter.write(OutputStreamWriter.java:190)
at java.io.BufferedWriter.flushBuffer(BufferedWriter.java:111)
at java.io.PrintStream.write(PrintStream.java:476)
at java.io.PrintStream.print(PrintStream.java:619)
at java.io.PrintStream.println(PrintStream.java:756)
at HuffmanNode.buildTree(hw4.java:65)
at HuffmanNode.buildTree(hw4.java:66)
at HuffmanNode.buildTree(hw4.java:66)
at HuffmanNode.buildTree(hw4.java:66)
at HuffmanNode.buildTree(hw4.java:66)
물론, I는() buildTree에서 무한 recusive 방법이있다. 그러나, 나는 그것이 무엇을하고 있는지 이해하지 못한다. 나는이 잠시 동안 있었다 꽤 좌절대로
public void buildTree(HuffmanNode node){
if (node.compareTo(this) <= 0 && left != null){
System.out.println(node.getCount() + ":" + this.count);
left.buildTree(node);
}
else if (node.compareTo(this) <= 0 && left == null){
this.left = node;
node.parent = this;
}
else if (node.compareTo(this) > 0 && right != null){
System.out.println(node.getCount() + ":" +this.count);
right.buildTree(node);
}
else if (node.compareTo(this) > 0 && right == null){
this.right = node;
node.parent = this;
}
}
은 내 전체 코드 입력 파일을 크게 감상 할 수
어떤 통찰력 Here을 볼 수 있습니다.
업데이트 때문에 페이스트 빈 코드 라인 – user1093111
당신이 있습니까 오류를 일치되어 루프가 끝날 때
그런 다음 당신은root
인,huffmanList
에 하나의 노드 만이있을 것이다 재귀 함수의 정지 조건? –글쎄, 그것은 156-160에 내려야 만했습니다. 루트 값에 도달하면 root = 결과를 얻은 다음 root.genCode()를 사용하여 이진 파일을 인쇄합니다. 하지만 내 논리가 잘못 될 수 있습니다. – user1093111