为我的 类 得到一个奇怪的 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