2013-12-10 61 views
2

我遇到了一個小問題,例如當乘以5 * 5時,答案將爲25.但是,當乘以5 * 5 * 5時,答案仍然保持25。NetBeans Java計算器查詢

變量

public class Calculator extends javax.swing.JFrame { 

    double total; 
    double input; 

    boolean plus = false; 
    boolean multi = false; 
    boolean division = false; 
    boolean minus = false; 
} 

的乘按鈕

private void btnMultiActionPerformed(java.awt.event.ActionEvent evt) {           
    input = Double.parseDouble(txtArea.getText()); 

    total = input; 
    multi = true; 
    txtArea.setText(null); 
}   

等號按鈕

private void btnEqualsActionPerformed(java.awt.event.ActionEvent evt) {           

    if (plus == true) 
    { 
     input = Double.parseDouble(txtArea.getText());  
     total = input + total;   
    } 
    else if (minus == true) 
    { 
     input = Double.parseDouble(txtArea.getText());   
     total = input - total; 
    } 
    else if (multi == true) 
    { 
     input = Double.parseDouble(txtArea.getText());   
     total = input * total; 
    } 
    else if (division == true) 
    { 
     input = Double.parseDouble(txtArea.getText());   
     total = input/total; 
    } 
    else 
    { 
    } 

    txtArea.setText("" +total); 


} 
+0

您需要嵌套乘法或使用ScriptEngine.eval operatoin。 – Masudul

+0

我找不到地方...你在哪裏做5 * 5 * 5 ...如果(多==真) { input = Double.parseDouble(txtArea.getText()); total = input * total; } 只反映乘法而不是任何5 * 5 * 5 ... –

+0

您正在做的事情可能會出現一些用戶界面問題。在你的問題中更新你的完整代碼。 – vels4j

回答

1

您解析輸入(5*5)爲Double,它得到的結果5,因爲*5不是Double的一部分。

然後,您將input指定爲total。然後你乘以inputtotal,結果爲25.

你的邏輯正在做它被告知要做的事情,但是你想要真正計算一些東西。這將變得更加困難。

5*5*5的情況下,您的input將再次僅爲5

我已經解釋了爲什麼5*5 = 255*5*5 = 25爲您的程序。

解決辦法是做出某種解析引擎,其翻譯是這樣的:

  • 5*5mul(5, 5)
  • 5*5*5mul(5, mul(5, 5))

然後有它背後的Java操作真正計算它。

+0

他不解析5 * 5,很好地閱讀代碼。每次執行一個動作時,他會清除txt區域 – vels4j

+0

@ vels4j因此,他第一次解析「5」,然後所有的「輸入」都神奇地消失了。我想我已經說過了,如果我錯了,請糾正我。 – skiwi

+0

**您正在解析輸入(5 * 5)爲Double,其結果爲5 **這是錯誤的,無法解析字符串5 * 5。假設像在計算器中進行操作。按5 - >按* - >按5 - >按= – vels4j

0

您的功能private void btnMultiActionPerformed(java.awt.event.ActionEvent evt)每次都會重置textarea,因此每當您調用它時,它只會滿足一個值並且不會滿足舊的結果... 從此函數中消除以下行並進行檢查。 ..我想這將解決這一問題

txtArea.setText(null); 

,如果你需要重新設置文本區域時都會再考慮下面的解決方案......

解決方案:

步驟1:在聲明變量total時,還需要使用0.0進行初始化。

第2步:在您的陳述中應用以下檢查,即total = input;btnMultiActionPerformed函數。

檢查:

if (total > 0.0) 
      total = total * input; 
     else 
      total = input; 

這絕對會爲你做這項工作。

懸掛指針

0

的問題是在未選中狀態分配在btnMultiActionPerformed方法。

total = input; 

因此,每次單擊Multiply按鈕時,舊的結果都會丟失。
檢查作業應該如下進行:

private void btnMultiActionPerformed(java.awt.event.ActionEvent evt) {           
      input = Double.parseDouble(txtArea.getText()); 
      //perform check below, instead of unchecked assignment 
      if (total == 0) 
       total = input; 
      else 
       total *= input; 
      multi = true; 
      txtArea.setText(null); 
     } 
+0

這樣的文本這個解決方案會更糟糕,考慮用戶第一次來到應用程序的場景......然後總和不會等於零,因爲它沒有被初始化,然後它會去在其他部分,總數將與輸入相乘並存儲在總數中......這將導致不穩定和不想要的結果。 –

+0

@DanglingPointer:你錯了,它永遠不會讓你失望,因爲在Java中,double默認初始化爲零,請參考[Java文檔](http://docs.oracle.com/javase/specs/jls/se7/html /jls-4.html#jls-4.12.5) –

+0

好的...但是它初始化爲0.0,因爲它是一個雙精度值,而不是0. –