2016-11-06 55 views
0

我在教自己的Java,而不是通常的「hello world!」我認爲最好是構建一個計算器應用程序,並在構建它時學習Java。如何在java代碼中使用parenetheses

"JavaCalculator.png"

我的問題是:我如何編程「(」和「)」括號鍵,以便我可以在我的計算器應用程序中使用它們。

一個典型的數字鍵(2)在我的應用程序是:

private void btnTwoActionPerformed(java.awt.event.ActionEvent evt) {          
    if (bFinish == false) { 
     String btnTwoText = txtDisplay.getText() + btnTwo.getText(); 
     dObtainer = Double.parseDouble(btnTwoText); 
     txtDisplay.setText(btnTwoText); 
    } else { 
     txtDisplay.setText(""); 
     String btnTwoText = txtDisplay.getText() + btnTwo.getText(); 
     dObtainer = Double.parseDouble(btnTwoText); 
     txtDisplay.setText(btnTwoText); 
     bFinish = false; 
    } 
} 

一個典型的操作按鈕( - )在我的應用程序是:

private void btnMinusActionPerformed(java.awt.event.ActionEvent evt) {           
     String button_text = "-"; 
     getOperator(button_text); 
} 


private void getOperator(String btnText) { 
     mathOperator = btnText.charAt(0); 
     dTotal1 = dTotal1 + dObtainer; 
     txtDisplay.setText(""); 
    } 

這是發生在什麼「等於「按鈕被按下。

private void btnEqualsActionPerformed(java.awt.event.ActionEvent evt) {           
     String sBuffer = ""; 

     switch (mathOperator) { 
      case '+': 
       dResult = dTotal1 + dObtainer; 
       break; 
      case '-': 
       dResult = dTotal1 - dObtainer; 
       break; 
      case '/': 
       dResult = dTotal1/dObtainer; 
       break; 
      case '*': 
       dResult = dTotal1 * dObtainer; 
       break; 
      case '^': 
       dResult = Math.pow(dTotal1, dObtainer); 
       break; 
      case '(': 
       sBuffer = "("; 
       //dResult = dObtainer; 
       break; 
     } 

     mathOperator = '\0'; 
     dTotal1 = 0; 
     dObtainer = 0; 

     DecimalFormat df = new DecimalFormat("#.########"); 
     if(!"(".equals(sBuffer)) 
       sBuffer = df.format(dResult); 
     if(!")".equals(sBuffer)) 
       sBuffer = df.format(dResult); 
     sBuffer = sBuffer.replace(".0", ""); 
     txtDisplay.setText(sBuffer); 

     bFinish = true; 
    } 
+0

你的代碼wi在目前的形式下永遠不能正常工作。把它全部扔掉,並查找遞歸下降表達式解析,或Dijkstra調車碼算法。 – EJP

+0

對不起,但它的劑量。 – Simnix

回答

0

您可以使用StringBuilder,以創建表達(如2+(1-5)),然後使用:

import javax.script.ScriptEngineManager; 
import javax.script.ScriptEngine; 
... 

ScriptEngineManager mgr = new ScriptEngineManager(); 
ScriptEngine engine = mgr.getEngineByName("JavaScript"); 
String exp = sb.toString(); //sb is the string builder 
int result = 0; 
try { 
    result = (int) engine.eval(exp); 
} catch (ScriptException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
//from here you can use result in whatever way you want 
+0

謝謝你的幫助,你給我一些想法。 – Simnix

+0

@Simnix然後你應該接受答案 – ItamarG3

0

作爲一個初學者,我建議乾脆一起去內置Javascript engine

ScriptEngineManager mgr = new ScriptEngineManager(); 
ScriptEngine engine = mgr.getEngineByName("JavaScript"); 
String foo = "4+5+(8*4)"; //replace your expression here 
System.out.println(engine.eval(foo)); 

另一個你可以使用的MVEL

+0

謝謝你的幫助,你給了我一些想法。 – Simnix