升级到JDK11后VSCode中Huffman树Java代码报构造器错位错误如何解决?
问题排查结果
你的报错和JDK版本升级无关联,是代码本身存在Java语法错误导致的编译失败,具体问题如下:
- 核心语法错误:
Huffman类的定义写法错误,你写的是public class Huffman(),类名后不允许加括号,括号仅用于构造方法定义,类定义后直接跟类体大括号即可。编译器识别到类名后的括号会误以为你要定义构造方法,进而报出构造器错位相关的错误。 - 次要语法错误:
BuildHuffmanCodeTree方法声明了返回值类型为Node,但方法体内没有编写对应返回语句,不符合非void方法的语法要求。 - 逻辑缺失:你在循环中创建的
tempNode没有存入任何容器,后续无法使用这些节点完成哈夫曼树构建。
修正后的Huffman类参考代码
import java.util.PriorityQueue; import java.util.Comparator; // 移除类名后的多余括号 public class Huffman { public Node BuildHuffmanCodeTree(String[] chars, int[] weights) { // 用优先队列存储节点自动按权重排序 PriorityQueue<Node> queue = new PriorityQueue<>(Comparator.comparingInt(Node::getWeight)); for(int i = 0; i < chars.length; i++) { Node tempNode = new Node(chars[i], weights[i]); queue.add(tempNode); } // 补充哈夫曼树构建逻辑,返回最终根节点 while (queue.size() > 1) { Node left = queue.poll(); Node right = queue.poll(); Node parent = new Node(left, right); queue.add(parent); } return queue.poll(); } public static void main(String[] args) { } }
修正上述问题后即可正常编译运行。
内容的提问来源于stack exchange,提问作者Dylan Schneiderman
相关产品推荐
相关产品推荐

