2

括弧、プラス、マイナス、除算、乗算を処理できる電卓をJavaで作成する必要があります。これまでのところ、ユーザーが入力した場合:

14 * ( 2 - ( 3 / 2 ) )

次に、ArrayList を次のように返します。

[14.0, 2.0, 3.0, 2.0, /, -, *]

これは私が欲しいものです

次に、「/」を 2 と 3 に適用して取得するにはどうすればよいですか。

[14.0, 2.0, 1.5, -, *]

2 と 1.5 に「-」を追加すると、次のようになります。

[14.0, 0.5, *] 

これは続き、最終的な答えは 7.0 になります

誰でもこれを行う方法についてアドバイスできますか?

どんな助けにも乾杯:)

4

3 に答える 3

1

数字のみをスタックにプッシュする必要があります。そのため、オペレーターはスタックに移動しません。これは、リストが次のようになることを意味します。

[14.0, 2.0, 3.0, 2.0]
// applying / by popping two elements and adding the result
[14.0, 2.0, 1.5]
// applying - by popping two elements and adding the result
[14.0, 0.5]
// applying * by popping two elements and adding the result
[7.0]

これは、数値がいつスタックに入れられ、いつ演算子が適用されるかを決定するのはあなた次第であることを意味することに注意してください。

于 2013-12-27T11:14:31.963 に答える
0

かっこ内の式の値を計算するには、のArrayList<Object>代わりに再帰を使用する必要があると思います。ArrayList<String>アルゴリズムは簡単に次のようになります: リストの要素がクラスArrayList<Object>のインスタンスである場合、Stringこれまでと同様に扱います (単一の数値または演算子のいずれかです)。リストの要素がArrayList<Object>List クラスのインスタンスである場合、再帰を使用して、そのリストにある式の値を計算します。
たとえば、式がある場合:

14 * ( 2 - ( 3 / 2 ) )

ArrayList を次のように返す必要があります。

[14.0, [2.0, [3.0, 2.0, /], -], *]

私の答えが少しお役に立てば幸いです。

于 2013-12-30T13:32:27.633 に答える
0

次のようなものを使用できます。

List<String> list=new ArrayList<String>();
     list.add("5");
     list.add("6");
     list.add("7");
     list.add("-");
     list.add("+");
     String prev=null;
     String cur=null;

     List newList=new ArrayList(list);
     Iterator<String> iterator=newList.iterator();
     String val;
     int index=0;

     while(iterator.hasNext()){
          val=iterator.next();
         if(val.matches("(-)?\\d+([.]\\d+)?")){
             prev=cur;
             cur=val;                            
         }
         else{
                index=list.indexOf(prev);
                list.remove(prev);
                list.remove(cur);
                list.remove(val);

            if(val.equals("+")){
                list.add(index,(Float.parseFloat(prev)+Float.parseFloat(cur))+"");
            }
            else if(val.equals("-")){
                list.add(index,(Float.parseFloat(prev)-Float.parseFloat(cur))+"");
            }
           //Initialize iterator to point first element
            newList=new ArrayList(list);
            iterator=newList.iterator();
            prev=null;
            cur=null;
         }
     }



    iterator=list.iterator();
     while(iterator.hasNext()){
         String val1=iterator.next();
         System.out.println(" ## "+val1 );
     }

条件 : - このコードは二項演算子に対しては機能し、単項演算子に対しては機能しません。

于 2013-12-27T11:28:52.403 に答える