2012-07-30 60 views
2

好吧,我正在用Java編寫計算器,並將String輸入到我的加法中。我用JButtons將文字寫入JTextField。當用戶點擊等號按鈕時,我發現他們想要執行的相對操作(如果他們點擊一個操作符按鈕,我將int設置爲一個特定的數字(所以加1))。我首先將String轉換爲char數組,然後檢查字符是數字還是操作符。計算器爲Java中的計算方法生成空字符串錯誤

我打算爲我計算機能夠做的所有計算寫下幾種方法(傷害,減法等)。然後,我使用.append方法將不是運算符的字符寫入StringBuffers,然後我將其轉換爲字符串,之後再加倍。然後我進行計算,並返回結果。

當我嘗試使用計算器時,Eclipse會報告java.lang.NumberFormatException,我嘗試將保存StringBuffer的字符串轉換爲double。異常是由空的String引起的。

任何人都可以解釋爲什麼會發生這種情況,並提供解決方案嗎?

下面是相關代碼:

import java.awt.event.*; 
import javax.swing.*; 
import java.awt.GridLayout; 


public class Calculator2012 extends JFrame implements ActionListener{ 

    public static double calculateAdd(String inputString)//this is my addition method 
    { 
     int s = 0; 
     boolean g = true; 
     StringBuffer num1 = new StringBuffer(); 
     StringBuffer num2 = new StringBuffer(); 
     char[] b = inputString.toCharArray(); 
     int i = 0; 
     if(g==true) 
     { 
      for(int v = 0; v<b.length; v++) 
      { 
       if(b[i]!='+') 
       { 
        num1.append(b[i]); 
       } 
       else 
       { 
        g = false; 
        s = ++i; 
        break; 
       } 
       i++; 
      } 
     } 
     else 
     { 
      for(int a = 0; a<(b.length-s); a++) 
      { 
       num2.append(b[s]); 
       s++; 
      } 
     } 
     String c1 = num1.toString(); 
     String c2 = num2.toString(); 
     double x = Double.parseDouble(c1); 
     double y = Double.parseDouble(c2);//this is the error producing line 
     double z = x+y; 
     return z; 
    } 

這是我的方法調用:

public void actionPerformed(ActionEvent e) 
{ 
    //omitted irrelevant code 

    if(e.getSource()==equals) 
    { 
     s1 = tf1.getText(); 
     s2 = " = "; 
     s3 = s1+s2; 
     tf1.setText(s3); 
     if(p==1)//p is my int that detects which operator to use 
     { 
      s1 = tf1.getText(); 
      s2 = Double.toString(calculateAdd(s1));//I call the method here 
      s3 = s1+s2; 
      tf1.setText(s3); 
+0

適當的縮進大大提高了可讀性... – mellamokb 2012-07-30 20:25:56

+0

我寫了34 + 0的計算。c1持有34,c2是空的 – imulsion 2012-07-30 20:30:32

回答

3

由於gtrue,這部分永遠不會執行:

else 
    { 
     for(int a = 0; a<(b.length-s); a++) 
     { 
      num2.append(b[s]); 
      s++; 
     } 
    } 

因此num2被從未填充過,並且你會得到異常ab試圖解析一個空字符串。

+0

謝謝! :)我沒有時間2現在測試,我會回來2我tmrw – imulsion 2012-07-30 20:33:49

+0

我已經重新編寫了程序,現在它工作正常(至少對於添加)。謝謝4指出不可能的陳述 - 我不知道爲什麼我這麼做:) – imulsion 2012-07-31 07:54:47

+0

@imulsion:學習過程的所有部分。樂意效勞 :) – mellamokb 2012-07-31 12:38:32