2015-12-08 63 views
0

你好傢伙即時嘗試做一個基於用戶掃描儀輸入的計算器,該計算器工作正常,從左到右進行計算,但我有困難把優先級放在*,/和() 例如3+(5 * 2 )+1應該是14而不是我的是17,然後當我嘗試 5 +((2 + 1)* 3)-1它給了我奇怪的錯誤.. 任何人都可以幫忙嗎?以及如何讓我的代碼看起來更高效和更簡單,謝謝您提前。 因此,這裏是我的代碼:如何在我的計算器中首先計算乘法和除法?

System.out.print("Input Equation : "); 
        n = s.next() + s.nextLine(); 

        n = n.replaceAll("\\s+", ""); 

        char[] nans = n.toCharArray(); 

        c = 0; 
        for (int i = 0; i < n.length(); i++) 
         if (nans[i] == '+' || nans[i] == '-' || nans[i] == '/' || nans[i] == '*') 
          c++; 

        char[] op = new char[c]; 
        int[] num = new int[c + 1]; 

        c = 0; 
        for (int i = 0; i < n.length(); i++) { 
         if (nans[i] == '+' || nans[i] == '-' || nans[i] == '/' || nans[i] == '*') { 
          op[c] = nans[i]; 
          c++; 
         } 
        } 

        c = 0; 
        for (int i = 0; i < n.length(); i++) { 

         if (nans[i] == '1' || nans[i] == '2' || nans[i] == '3' || nans[i] == '4' || nans[i] == '5' 
         || nans[i] == '6' || nans[i] == '7' || nans[i] == '8' || nans[i] == '9' || nans[i] == '0') 
         nus = nus + nans[i]; 

         else if (nans[i] == '+' || nans[i] == '-' || nans[i] == '/' || nans[i] == '*') { 
          num[c] = Integer.parseInt(nus); 
          nus = ""; 
          c++; 
         } 
         if (i == n.length() - 1){ 
          num[c] = Integer.parseInt(nus); 
         } 
        } 

        for (int i = 0; i < c; i++) { 
         if (op[i] == '+') { 
          result = result + num[i] + num[i + 1]; 
          num[i + 1] = 0; 
         } 

         else if (op[i] == '-') { 
          result = result + num[i] - num[i + 1]; 
          num[i + 1] = 0; 
         } 

         else if (op[i] == '/') { 
          result = (result + num[i])/num[i + 1]; 
          num[i + 1] = 0; 
         } 

         else if (op[i] == '*') { 
          result = (result + num[i]) * num[i + 1]; 
          num[i + 1] = 0; 
         } 
        } 



        System.out.print(" = "+ result); 
+0

錯誤,因爲你沒有任何條件來檢查「(」或「)」 –

+1

當你的變量名稱很模糊時,如'n','c','s','op '。你應該給你的變量有意義的名字。解釋你在你的決定或計算中想達到的意見也不會傷害任何一方。除此之外,說「怪異的錯誤」還不夠。您應該將包括堆棧跟蹤在內的錯誤添加到您的問題中,並用註釋突出顯示發生錯誤的行。 – RealSkeptic

回答

0

當你讀一個令牌(即操作者或只是一些參數),確保下一個操作員是不是乘除,否則,你要計算那個。您可以通過遞歸輕鬆實現此目的。

+0

我怎樣才能實現這與遞歸?如果你不介意給我看它的例子..謝謝@Illiaz Akhmedov – RikiMaru