2016-11-06 56 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