Как закодировать Java-программу, ввод которой заканчивается точкой с запятой. Пример ввода: стек 7 4 2 3 * +; - PullRequest
0 голосов
/ 09 апреля 2019

Postfix Evaluator - это программа, которая получает выражение postfix и вычисляет значение выражение. Форма постфикса представляет собой естественный способ оценки выражений, потому что правила приоритета не требуются. Черный ящик, показанный ниже, представляет Оценщик Постфикса. Если мы дадим вход 4 2 3 * +, программа выдаст вывод 10. Моя задача - написать программу для постфиксного оценщика с Ввод заканчивается точкой с запятой . вход пример: Стек 7 4 2 3 * +;

import java.util.Scanner;
import java.util.Stack;

public class Task2 {
    public static void main(String[] args) {

        String p;
        Scanner s=new Scanner(System.in);
        p=s.nextLine();
        while(!(p.equals(";"))) {
        Stack<Integer> st=new Stack<Integer>();
        Scanner sc=new Scanner(p);
        int a,b,c;
        String operator;

        while(sc.hasNext()==true) {

            if(sc.hasNextInt()==true)
                st.push(sc.nextInt());

            else
            {
                operator=sc.next().trim();
                a=st.pop();
                b=st.pop();

                switch (operator)
                {

                case "^" :
                    c=(int) Math.pow(b,a);
                    st.push(c);
                    break;

                case "%" :

                    c=b%a;
                    st.push(c);
                    break;

                case "*" :
                    c=b*a;
                    st.push(c);
                    break;
                case "/" :
                    c=b/a;
                    st.push(c);
                    break;

                case "+" :
                    c=b+a;
                    st.push(c);
                    break;

                case "-" :
                    c=b-a;
                    st.push(c);
                    break;


                } // switch



            } //else

        }//while loop

        int result;
        result=st.pop();
        System.out.println(result);
        }
}
}

1 Ответ

0 голосов
/ 10 апреля 2019

У меня просто возникла проблема с добавлением условия, в котором входы заканчиваются точкой с запятой (вход должен заканчиваться;)

Если это не более того ... ; читается как operator, поэтому после строки

                operator=sc.next().trim();

добавьте

                if (operator.equals(";")) { p = ";"; break; }

, чтобы выйти из внутреннего, а затем и из внешнего while цикла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...