为我的类获取一个奇怪的java.lang.NoSuchMethodError

时间:2015-03-03 18:31:10

标签: java methods runtime-error nodes treenode

我正在尝试实现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并相应地更改文件名,则它可以正常运行。

3 个答案:

答案 0 :(得分:2)

您必须在类路径中添加已编译的类BST

尝试:

 Java -cp ./ Main

答案 1 :(得分:1)

尝试使用javac *.java。这将编译当前目录中的所有类。

答案 2 :(得分:1)

此代码应该可以正常工作。确保已在IDE中清理了项目。更具体地说,确保编译和更新类BST,以便Main类可以看到最新的更改。

您可以使用javac *.java

一次编译所有课程