2013-10-19 27 views
0

所以我有一個分配工作與堆棧和中綴到Postfix計算。現在我有了Postfix計算的中綴,但是..有這個部分它說我必須計算4個隨機數和隨機運算符。計算在Java中的字符串變量的總和

所以我有一個數組1-9的數組,以及由+, - 和*組成的char數組。

我可以讓我的隨機計算,並把它放在一個字符串對象,但我似乎無法以適當的方式存儲在一個整數變量的計算。隨着運營商的適當的優先級..我已經嘗試了一些開關和If-else的聲明,但我找不到出路了。

我有一個堆棧和一個InToPost類給出。

計算看起來像這樣的代碼:

String calculation = Integer.toString(numbers[random.nextInt(9)]) 
      + Character.toString(operators[random.nextInt(2)]) 
      + Integer.toString(numbers[random.nextInt(9)]) 
      + Character.toString(operators[random.nextInt(2)]) 
      + Integer.toString(numbers[random.nextInt(9)]) 
      + Character.toString(operators[random.nextInt(2)]) 
      + Integer.toString(numbers[random.nextInt(9)]); 

我現在想要的是來計算的話,但很難與*運算符的優先級。

所有幫助將不勝感激:)

回答

-1

感謝所有方便的技巧傢伙。但我發現了一個非常簡單的方法來做到這一點。我有一個後綴到Postfix計算器吧?所以我做的是創建隨機計算,將其放入一個字符串中。

使用中綴>後綴轉換器使其成爲後綴。然後在堆棧上推後綴計算的數字,在操作員處彈出它們,如果操作符是+,則會將它們加在一起。不用擔心操作符的優先級,因爲在後綴中這已經爲您完成了! :D

希望這會幫助人們:)如果需要,我可以發佈中綴計算器後綴計算器!

0

將字符串轉換爲運算符是不可能的。 你需要一種方法來達到你想要的。 在this link是一個可以幫助你的例子。

儘管它在C#中,它幾乎是你想要的。

+0

我會檢查出來,謝謝 – Burbanana

+0

是的,基本上你想說'如果(op =='*'){/ *乘以整數左邊對int向右* /}否則如果...'。 – Radiodef

6

我建議將數據解析到樹中,其中每個節點是一個操作,葉子是值,這將使您更容易實現操作順序。使您的最高優先級的操作最低,並執行自下而上。

enter link description here

+0

這基本上是問題的正確答案。 OP基於字符串輸入做基於PEMDAS的計算(這是我的假設你的意思)實際上不是一項簡單的任務。您必須在每一步都進行解析,基本上找到最內層最高優先級的運算符,然後在每次計算結果後每次向外移動。如果您可以像用戶所暗示的那樣對其進行重新組織,但它仍然不是特別簡單。 – Radiodef

+0

非常感謝你的提示,我會在需要時使用它。我所做的是創建一個堆棧,並使用我的計算的後綴值來計算答案:D – Burbanana