2014-11-04 1 views
0

Мне сложно найти, как получить мой постфикс для оценки отрицательных чисел.Оценить пост исправление с отрицательными номерами

Мой инфикс к постфиксу, кажется, работает нормально с отрицательным числом, например, как, например, из моей программы .. инфикса: (-3) + 5 * 3 постфикс: 3-53 * +

Вот мой метод оценки, я знаю, что чем меньше кода, тем лучше, если вы хотите увидеть любой другой из моего кода, просто дайте мне знать. Я пробовал много вещей, но не повезло, любые предложения или рекомендации будут оценены!

public int evaluate(String evalute){ 
    int number1; 
    int number2; 
    int result = 0; 
    int finalResult = 0; 

    Stack<Integer> d = new Stack<Integer>(); 

    for(int i = 0; i < evalute.length(); i++){ 
    char curChar = evalute.charAt(i); 
    if(curChar >= 48 && curChar <= 57){ 
     int store = curChar; 
     store -=48; 
     d.push(store); 

    } 

    else if(curChar == '+'){ 
     number1 = d.pop(); 
     number2 = d.pop(); 
     result = number1 + number2; 
     d.push(result); 
    } 

    else if(curChar == '-'){ 
     number1 = d.pop(); 
     number2 = d.pop(); 
     result = number2 - number1; 
     d.push(result); 
    } 
    else if(curChar =='*'){ 
     number1 = d.pop(); 
     number2 = d.pop(); 
     System.out.println(result = number1 * number2); 
     d.push(result); 
    } 
    else if(curChar =='/'){ 
     number1 = d.pop(); 
     number2 = d.pop(); 
     result = number2/number1; 
     d.push(result); 
    } 
    } 


    finalResult = d.pop(); 
    return finalResult; 
} 

ответ

0

Я возьму ваш пример

инфикс: (-3) + 5 * 3 постфикса: 3-53 * +

EVAUATION 
push 3 

read - ---> you have no 2 elements in the stack -> EXCEPTION 
(or by luck you can have 2 but is not the behavior you want) 

Это далеко кажется все в порядке, но .. как вы отличаете унарный минус от двоичного минуса? Когда вы читаете 3 - 3, вы читаете операцию вычитания с двумя операндами или двумя необработанными операндами с обратным знаком?

Наиболее простым решением является использование другого символа для обозначения отрицательных чисел, таких как ! письмо N или что-то другое, кроме минуса, оно само по себе, другое мудрое, когда вы читаете минус, вы удаляете 2 элемента из стека и вы выполняете вычитание.

Вместо этого вы хотите, чтобы прочитать знак как ! вы палить 1 элемент (d) и нажимаешь обратно в стек -d ..

так из (-3) + 5 * 3 постфикса: 3 53 * +

EVALUATION 
push 3 

read ! --> pop 3 and push -3 

push 5 - push 3 

read * ---> pop 5 - pop 3 push 3*5 

read + ---> pop 15 (= 3*5) pop -3 and push 15 + (-)3 

пути использования таких два разных символов вы решили проблему ..

-1

Ну я думаю, что это в разборе фазы строки. ваш анализатор должен определить, является ли он отрицательным или положительным, после генерации токенов вы можете перейти к преобразованию инфикса в постфикс и оценить постфикс. Я надеюсь, что это поможет :)

+1

Добавьте более подробную информацию, возможно, блок кода, чтобы уточнить ваш ответ. – UditS