1

Javaで後置計算機を作成するためにスタックを使用しています。主要部分を書きましたが、いくつかの問題に遭遇しています。手始めに、空白を考慮する必要がありますが、現在のセットアップでそれを行う方法がわかりません。それがプログラムを完全に修正するかどうかはわかりませんが、それは始まりです. どんな助けでも大歓迎です。

 import java.util.Scanner;
 import java.util.Stack;
 public class Postfix 
{
public static void main(String[]args)
{
    Scanner sc = new Scanner(System.in);
    System.out.println("Enter a Postfix expression");
    String input = sc.nextLine();
    Stack<Integer> Pstack = new Stack<Integer>();
    int result = 0;
    for(int i=0; i<input.length();i++)
    {
        char ch = input.charAt(i);

        if(ch>='0' && ch<='9')
        {
            Pstack.push((int)(ch-'0'));
        }
        else
        {
            int o1 = Pstack.pop();
            int o2 = Pstack.pop();

            switch(ch)
            {
            case '+':result=o1+o2;
            break;
            case '-':result=o1-o2;
            break;
            case '/':result=o1/o2;
            break;
            case '*':result=o1*o2;
            }
        }
        Pstack.push(result);
    }
    result = Pstack.pop();
    System.out.println("result: "+ result);
   }
}
4

1 に答える 1

2

コメントで述べたように、

if(ch == ' ') continue; 

直後

char ch = input.charAt(i);

これにより、空白の問題が修正されます。

もう一つの問題は、

Pstack.push(result);

演算子が評価された場合だけでなく、毎回実行されます。

したがって、このステートメントは「else」ケース内の最後のステートメントである必要があります。

また、引数がスタックからポップされる方法も修正する必要があります。

たとえば、後置式 12- (これは -1 に評価される必要があります) がある場合、2 がスタックの一番上にあり、1 が後に続きます。現在のソリューションでは、引数が間違った順序で取得されるため、結果は 2 -1 になります。

そう

int o1 = Pstack.pop();
int o2 = Pstack.pop();

に修正する必要があります

int o2 = Pstack.pop();
int o1 = Pstack.pop();
于 2016-09-20T05:36:27.133 に答える