我正在尝试实现TreeNodes和BST,我已经编写了两个文件来启动我。然而,即使在这一点上,我也得到一个非常奇怪的错误。在运行时,我被告知一个明确存在的方法不存在。
以下是两个类供您参考。
BST.java
public class BST {
TreeNode root;
public BST(int data) {
this.root = new TreeNode(data);
}
public boolean insert(int data) {
TreeNode newNode = new TreeNode(data);
TreeNode curr = root;
boolean inTree = false;
while (!inTree) {
// newNode is <= curr, place in left
if (newNode.getValue() <= curr.getValue()) {
if (curr.getLeft() != null) {
curr = curr.getLeft();
} else {
curr.setLeft(newNode);
inTree = true;
System.out.println(data+" INSERTED LEFT OF "+curr);
}
} else {
if (curr.getRight() != null) {
curr = curr.getRight();
} else {
curr.setRight(newNode);
System.out.println(data+" INSERTED Right OF "+curr);
inTree = true;
}
}
}
return true;
}
}
Main.java
public class Main {
public static void main(String[] args) {
BST bsTree = new BST(4);
bsTree.insert(1);
bsTree.insert(4);
bsTree.insert(0);
}
}
正常运行javac Main.java
但是当我运行java Main
时,我收到此错误:
Exception in thread "main" java.lang.NoSuchMethodError: BST.<init>(I)V
at Main.main(Main.java:5)
有人可以帮我理解为什么会这样吗?感谢
[编辑]:甚至发生了更多奇怪的事情。
假设我在另一个目录中创建一个全新的文件夹并放入此文件:
public class BST {
TreeNode root;
public BST(int val) {
TreeNode r = new TreeNode(val);
root = r;
}
public static void main(String[] args) {
System.out.println("hey");
}
}
编译它有效,但运行它只是给我没有结果,并没有终止。但是,如果我将类重命名为BSTe
并相应地更改文件名,则它可以正常运行。
答案 0 :(得分:2)
您必须在类路径中添加已编译的类BST
。
尝试:
Java -cp ./ Main
答案 1 :(得分:1)
尝试使用javac *.java
。这将编译当前目录中的所有类。
答案 2 :(得分:1)
此代码应该可以正常工作。确保已在IDE中清理了项目。更具体地说,确保编译和更新类BST
,以便Main
类可以看到最新的更改。
您可以使用javac *.java