2013-06-25 67 views
0

我有一個基本的計算器,所以當按下相同的按鈕時,JTextField被保存爲字符串形式,這就是問題,它是字符串形式,所以我不知道如何解決方程式。我試過使用JavaScript引擎,但無法弄清楚。任何幫助?如何在Java中的字符串中解決基本的數學公式?

//actionListener 
@Override 
public void actionPerformed(ActionEvent e) { 

    if(e.getSource().equals(oneButton)){ 
     input1 = 1; 
     text.setText(text.getText()+input1);} 
    else if (e.getSource().equals(twoButton)){ 
     input2 = 2; 
     text.setText(text.getText()+input2);} 
    else if(e.getSource().equals(threeButton)){ 
     input3 = 3; 
     text.setText(text.getText()+input3);} 
    else if(e.getSource().equals(fourButton)){ 
     input4 = 4; 
     text.setText(text.getText()+input4);} 
    else if(e.getSource().equals(fiveButton)){ 
     input5 = 5; 
     text.setText(text.getText()+input5);} 
    else if(e.getSource().equals(sixButton)){ 
     input6 = 6; 
     text.setText(text.getText()+input6);} 
    else if(e.getSource().equals(sevenButton)){ 
     input7 = 7; 
     text.setText(text.getText()+input7);} 
    else if(e.getSource().equals(eightButton)){ 
     input8 = 8; 
     text.setText(text.getText()+input8);} 
    else if(e.getSource().equals(nineButton)){ 
     input9 = 9; 
     text.setText(text.getText()+input9);} 
    else if(e.getSource().equals(zeroButton)){ 
     input0 = 0; 
     text.setText(text.getText()+input0);} 
    else if(e.getSource().equals(plusButton)){ 
     text.setText(text.getText()+" + ");} 
    else if(e.getSource().equals(minusButton)){ 
     text.setText(text.getText()+" - ");} 
    else if(e.getSource().equals(timesButton)){ 
     text.setText(text.getText()+" * ");} 
    else if(e.getSource().equals(dividButton)){ 
     text.setText(text.getText()+"/");} 
    else if(e.getSource().equals(clrButton)){ 
     text.setText("");} 
    else if(e.getSource().equals(enterButton)){ 
     eq = text.getText(); 
//trying the javascript  ScriptEngineManager mgr = new ScriptEngineManager(); 
     ScriptEngine engine = mgr.getEngineByName("JavaScript"); 

      try { 
       text.setText((String) engine.eval(eq)); 
      } catch (ScriptException e1) { 
       // TODO Auto-generated catch block 
       e1.printStackTrace(); 
      } 

    } 

回答

1

如果操作順序很重要,您將不得不使用堆棧。如果你只是從左到右計算,你應該沒問題。

由於@Ericson答案威利安斯,你將字符串轉換爲int或雙經:

String str = text.getText(); 
    Integer.parseInt(str); 
    Double.parseDouble(str); 

但是,你很可能會在這裏遇到麻煩,因爲當你按下回車鍵,你得到你放置在你的文本元素中的整個方程,也就是說,如果你按下回車鍵,並且你的方程存儲爲「2 + 3」,你的text.getText()會給你「2 + 3」,你將無法使用以下內容而不會給你一個錯誤。

Integer.parseInt(text.getText()); //NumberFormatException For input string: "2 + 3" 
    Double.parseDouble(text.getText()); //NumberFormatException for "2 + 3" 

你將不得不分手的字符串以特定的方式,才能將字符串轉換爲整數或雙打。打破字符串的一種好方法是使用類似於:

String st = text.getText(); 
//Example: String st = "2 + 3"; 
//remove white space 
st = st.replaceAll("\\s",""); 
//might have to change to allow for negative numbers 
String[] splitStrings = (st.split("((?<=[+-/*])|(?=[+-/*]))")); 
//Example: splitStrings is now -> ["2","+","3"] 

這打破了操作之間的字符串。然後你可以得到你想要的元素並將它們解析爲整數。因此,例如:

int result; 
int left = Integer.parseInt(splitStrings[0]); 
String op = splitStrings[1]; 
int right = Integer.parseInt(splitStrings[2]); 
if(op.equals("+")){ 
    result = left + right; 
} 
text.setText("" + result); 

但是,因爲公式可大了,你應該創建一個循環,做這樣的事情,你會需要如果語句或所有操作的switch語句。

0

你爲什麼不只是使用來自整型和雙班的解析方法?

int integerNumber = Integer.parseInt(text.getText()); 
double doubleNumber = Double.parseDouble(text.getText()); 

正如你所看到的,方法parseInt函數()從Integer類的字符串轉換一個整數,以加倍的同樣的情況。這樣做後,你可以完美地與你的字符串進行數學運算。

+0

非常感謝你 –

+0

不客氣:)。這些方法非常有用。 –