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

お客様のコードを現在の形では決して正しく動作しません。それをすべて投げ捨て、再帰的な降下表現の構文解析、またはDijkstra Shunting-yardアルゴリズムを調べます。 – EJP

+0

すみません。 – Simnix

答えて

0

エクスプレッション(のような2+(1-5))を作成するためにStringBuilderを使用し、使用することができます初心者として

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)); 
で行くことをお勧め

もう1つご利用くださいMVEL

+0

あなたの助けをありがとう、私にいくつかのアイデアを与えました。 – Simnix

関連する問題