2015-03-03 2 views
1

Я пытаюсь реализовать TreeNodes и BST, и я написал два файла, чтобы запустить меня. Однако даже в этот момент я получаю действительно странную ошибку. Во время выполнения мне говорят, что метод, который явно существует, не существует.Получение странного java.lang.NoSuchMethodError для моих классов

Вот эти два класса для вашей справки.

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) 

Может кто-то, пожалуйста, помогите мне понять, почему это происходит? Thanks

[EDIT]: Даже больше странных вещей происходит.

Скажем, я сделать совершенно новую папку в другую папку и поместить этот файл:

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 и изменим имя файла соответственно, он будет работать ... что происходит.

ответ

2

Вы должны добавить скомпилированный класс BST в свой путь к классам.

Try:

Java -cp ./ Main 
+0

Этот точный код по-прежнему дает мне ту же ошибку – Zach

+0

@zach Скомпилировали ли вы BST? в котором находится каталог BST.class? – Jens

+0

Все скомпилировано. Если у меня есть другой BST.java и BST.class в другом каталоге, он не должен с ним связываться ... не так ли? – Zach

1

Пробуйте использовать javac *.java. Это скомпилирует весь ваш класс в текущем каталоге.

+0

Спасибо, я пробовал это, но я все еще получаю ошибку. – Zach

1

Этот код должен работать нормально. Убедитесь, что вы очистили проект в своей среде. В частности, убедитесь, что класс BST скомпилирован и обновлен, так что последние изменения соответствуют классу Main.

Вы можете собрать все классы одновременно, используя javac *.java

+0

В настоящее время у меня есть классы в папке, и я использую Sublime Text. Я успешно запускаю 'javac * .java', но безрезультатно ... – Zach

 Смежные вопросы

  • Нет связанных вопросов^_^