2015-03-04 3 views
-2

Дерево Класс:Преобразование из строки в объект, определенный пользователем. Класс литой исключение

public class Tree { 

    String data; 
    Tree left,right; 

    public Tree(String data, Tree left, Tree right){ 
     this.data = data; 
     this.left = left; 
     this.right = right; 
    } 
} 

Другой класс, содержащий конкретный метод:

public static void evaluateDecisionTree(String s){ 
    //String s is a post-fix converted expression. 
    String tokens[] = s.split(" +"); 
    Stack tree_stack = new Stack(); 
    Tree root; 

    for(int i=0; i < tokens.length; i++){ 

     if(tokens[i].matches("[-]?[0-9][0-9]*")){ 
      tree_stack.push(tokens[i]); 
     } 
     else if(tokens[i].equals("!")){ 
      tree_stack.push(new Tree(tokens[i], (Tree) tree_stack.pop())); 
     } 
     else{ 
      tree_stack.push(new Tree(tokens[i], (Tree) tree_stack.pop())); //line 138 
     } 

    } 

Ошибка:

Exception in thread "main" java.lang.ClassCastException: java.lang.String cannot be cast to Tree
at In2Post.evaluateDecisionTree(In2Post.java:138)
at In2Post.main(In2Post.java:59)

Вопрос:

I know we cannot convert a String to an Object. Is there a way to achieve what I am doing ? I cannot change the constructor parameter to String as it would defy my logic in building a decision tree.

+0

Непонятно из вашего сообщения, какой код находится в строке 138 файла In2Post.java, который является местом исключения. –

+0

Извините. Я только что редактировал мой вопрос, включая строку №. 138 как комментарий. строка 59 просто вызывает метод из основного. – Aashil

+1

Определите правильный конструктор со входом строки, затем создайте объект древовидного класса и получите строку в качестве входного сигнала. –

ответ

0

Вы пытаетесь преобразовать String в дерево, поскольку объект стека содержит объекты String, возвращенные из split(). И java.lang.String - это не дерево.

+0

Я знаю. Я задавал альтернативное решение моей проблемы. Неважно. Я решил это. – Aashil

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