2012-11-15 2 views
0

У меня есть проблема, связанной вычисления выражения постфикса с использованием стекаjava.lang.Float не может быть приведен к java.lang.String инфиксу к постфиксу

for(int i=0;i<postfix.length;i++){ 
    System.out.println("iteration:"+(i+1)); 
    if(postfix[i].equalsIgnoreCase("+") || postfix[i].equalsIgnoreCase("-") 
     || postfix[i].equalsIgnoreCase("*") || postfix[i].equalsIgnoreCase("/")) { 
    num1 = Float.parseFloat((String)out.pop()); 
    System.out.println("pop:"+num1); 
    num2 = Float.parseFloat((String)out.pop()); 
    System.out.println("pop:"+num2); 
    if(postfix[i].equalsIgnoreCase("+")) { 
     temp = num2+num1; 
     out.push(temp); 
     System.out.println("push:"+temp); 
     } 
    else if(postfix[i].equalsIgnoreCase("-")) { 
     temp = num2-num1; 
     out.push((""+temp)); 
     System.out.println("push:"+temp); 
     } 
    else if(postfix[i].equalsIgnoreCase("*")) { 
     temp = num2*num1; 
     out.push((""+temp)); 
     System.out.println("push:"+temp); 
     } 
    else if(postfix[i].equalsIgnoreCase("/")) { 
     temp = num2/num1; 
     out.push((""+temp)); 
     System.out.println("push:"+temp); 
     } 
    } 
    else{ 
    System.out.println("push:"+postfix[i]); 
    out.push(postfix[i]); 
    } 
} 

код работает хорошо, если я только сделать операцию между двумя цифрами, например " 2 4 + « , но когда это становится как« 2 4 + 5 + », внезапно появляется ошибка. Я даже помещаю маркеры .. распечатки там, чтобы проверить поток моего кода ..thanks любая помощь?

+1

Я хотел бы хранить 'Double' в стеке, а не использовать' String' или 'Float' –

+0

« ошибка внезапно появляется », какая ошибка появляется где? –

+0

@Peter Lawrey accrding netbeans. в строке 97 появляется ошибка, начинающаяся с строки: num2 = Float.parseFloat ((String) out.pop()); System.out.println ("pop:" + num2); Ошибка Исключение в потоке "main" java.lang.ClassCastException: java.lang.Float не может быть добавлено в java.lang.String –

ответ

0

В одной строке out.push(temp);, которая нажимает Float вместо строки.

Я предлагаю вам использовать

Stack<Double> out = new Stack<Double>(); 

с

double num1 = out.pop(); 

и

out.push(num2 + num1); 

и

out.push(Double.parseDouble(postfix[i])); 

Поскольку Stack - это унаследованный класс, лучшим выбором будет Deque, но я полагаю, вам не нужно беспокоиться об изменении его для этого проекта.

+0

его по-прежнему та же ошибка T_T –

+0

Можете ли вы обновить исправленный код в своем вопросе? –

+1

он работает правильно сейчас .. спасибо! первый раз использовать этот стек <двойная вещь> .. –

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