0

後置式を評価しようとしています。

私のコードはコンパイルされますが、最終的な答えは間違っています。

他の回答を見てみましたが、Java にはありませんでした。

public class PA36Stack
{
   public static void main(String[] args)
   {
      PA31Stack an = new PA31Stack(12);

      String g = "234*+";
      int x = evaluate(an, g);
      System.out.print(x);
   }

   public static int evaluate(PA31Stack b, String g)
   {
      int temp = 0;
      for (int i = 0; i < g.length(); i++)
      {
         if (g.charAt(i) != '+' && g.charAt(i) != '-' && g.charAt(i) != '*' && g.charAt(i) != '/')
         {
            b.push(g.charAt(i));
         }
         else
         {
            int a = b.pop();
            int c = b.pop();

            if (g.charAt(i) == '+')
            {
               temp = a + c;
               b.push(temp);
            }
            //nextone
            if (g.charAt(i) == '-')
            {
               temp = (c - a);
               b.push(temp);
            }
            //two
            if (g.charAt(i) == '*')
            {
               temp = (c * a);
               b.push(temp);
            }
            //three
            if (g.charAt(i) == '/')
            {
               temp = (c / a);
               b.push(temp);
            }
         }
      }
      return b.pop();
   }
}
4

1 に答える 1

1

これは、計算の数値を表す char の ASCII 値を使用しているためです。

'1'基本的に、数値1を表す char を実際に表す int に変換する必要があり'2'ます2

'0'この問題を回避するには、スタックから pop-ind して実際の整数値を取得し、それをプッシュ時に追加しながら、char の ascii 値を減算する必要があります。

スタックのコードを投稿していないので、a を使用するように編集し、式java.util.Stack<Character>の正しい結果を得ました14234*+

public static int evaluate(Stack<Character> b, String g) {
    int temp = 0;
    for (int i = 0; i < g.length(); i++) {
        if (g.charAt(i) != '+' && g.charAt(i) != '-' && g.charAt(i) != '*'
                && g.charAt(i) != '/') {
            b.push(g.charAt(i));
        } else {
            int a = b.pop() - '0';
            int c = b.pop() - '0';

            if (g.charAt(i) == '+') {
                temp = a + c;
                b.push((char)(temp + '0'));
            }
            // nextone
            if (g.charAt(i) == '-') {
                temp = (c - a);
                b.push((char)(temp + '0'));
            }
            // two
            if (g.charAt(i) == '*') {
                temp = (c * a);
                b.push((char)(temp + '0'));
            }
            // three
            if (g.charAt(i) == '/') {
                temp = (c / a);
                b.push((char)(temp + '0'));
            }
        }
    }
    return b.pop() - '0';
}
于 2013-11-12T15:55:31.853 に答える