2012-07-30 3 views
2

괜찮습니다. 저는 Java로 계산기를 작성하고 있습니다. String을 입력 할 수 있습니다. 나는 JTextField에 텍스트를 쓰려면 JButtons을 사용합니다.계산기가 Java의 계산 방법에 대해 빈 문자열 오류를 생성합니다.

사용자가 같음 버튼을 클릭하면 수행 할 상대 작업을 찾습니다 (연산자 버튼을 클릭하면 int가 특정 숫자로 설정되므로 추가는 1입니다). 먼저 Stringchar 배열로 변환 한 다음 문자가 숫자인지 아니면 연산자인지 확인합니다.

저는 모든 계산을 위해 여러 가지 방법을 쓰려고합니다. 계산기를 (saddition, subtraction 등) 할 수있게 만들 계획입니다. 그런 다음 .append 메서드를 사용하여 연산자가 아닌 문자를 StringBuffers에 작성한 다음 문자열로 변환 한 다음 나중에 두 배로 만듭니다. 그런 다음 계산을 수행하고 결과를 반환합니다.

계산기를 사용하면 StringBuffer이 들어있는 문자열을 double으로 바꾸는 행에 java.lang.NumberFormatException이보고됩니다. 예외는 빈 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

+0

나는 34 + 0. 계산을 썼다. c1은 34, c2는 비어있다. – imulsion

답변

3

때문에 gtrue있다가,이 부분은 결코 실행되지 않습니다 :

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

을 따라서 num2입니다 결코 채워지지 않으며, 예외 ab를 얻는다. 빈 문자열을 구문 분석하려고합니다.

+0

고마워! :) 나는 지금 시간 2 시험하지, 나는 2 u tmrw 돌아올거야 – imulsion

+0

나는 프로그램을 다시 작성했습니다, 그리고 지금은 (적어도 추가를 위해) 잘 작동합니다. 감사합니다 4는 불가능한 진술을 지적했습니다 - 왜 내가 그랬는지 모르겠습니다. – imulsion

+0

@imulsion : 학습 과정의 모든 부분. 도와 줘서 다행 :) – mellamokb

관련 문제