为我的 类 得到一个奇怪的 java.lang.NoSuchMethodError
Getting a weird java.lang.NoSuchMethodError for my classes
我正在尝试实现 TreeNodes 和 BST,并且我已经编写了两个文件来启动我的工作。但是,即使在这一点上,我也遇到了一个非常奇怪的错误。在 运行 时,我被告知一个明显存在的方法不存在。
这两个 class供您参考。
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");
}
}
编译它可以工作,但是 运行宁它只是没有给我任何结果,也没有终止。但是,如果我将 class 重命名为 BSTe
并相应地更改文件名,它就可以工作...发生了什么。
尝试使用 javac *.java
。这将编译当前目录中的所有 class。
您必须在您的 class 路径中添加已编译的 class BST
。
尝试:
Java -cp ./ Main
此代码应该可以正常工作。确保您已经清理了 IDE 中的项目。更具体地说,确保 class BST
已编译和更新,以便 Main
class.
可以看到最新的更改
您可以使用 javac *.java
一次编译所有 classes
我正在尝试实现 TreeNodes 和 BST,并且我已经编写了两个文件来启动我的工作。但是,即使在这一点上,我也遇到了一个非常奇怪的错误。在 运行 时,我被告知一个明显存在的方法不存在。
这两个 class供您参考。
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");
}
}
编译它可以工作,但是 运行宁它只是没有给我任何结果,也没有终止。但是,如果我将 class 重命名为 BSTe
并相应地更改文件名,它就可以工作...发生了什么。
尝试使用 javac *.java
。这将编译当前目录中的所有 class。
您必须在您的 class 路径中添加已编译的 class BST
。
尝试:
Java -cp ./ Main
此代码应该可以正常工作。确保您已经清理了 IDE 中的项目。更具体地说,确保 class BST
已编译和更新,以便 Main
class.
您可以使用 javac *.java