2

OK、私は Java で電卓を書いて​​いて、a の入力をString足し算メソッドに取り込んでいます。JButtonsにテキストを書き込むために使用しますJTextField

ユーザーが等号ボタンをクリックすると、実行したい相対的な操作が見つかります (演算子ボタンをクリックすると、int に特定の数値が設定されます (加算は 1 になります))。最初に を配列に変換してStringからchar、文字が数値か演算子かを確認します。

電卓でできるようにするすべての計算 (加法、減法など) について、いくつかのメソッドを作成する予定です。次に、.appendメソッドを使用して、演算子ではない char を に書き込み、StringBuffersそれを String に変換し、後で double に変換します。次に、計算を実行し、結果を返します。

電卓を使用しようとすると、Eclipse は、java.lang.NumberFormatException保持されている文字列を に変換しようとした行にStringBufferaを報告し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);
4

1 に答える 1

3

gisであるためtrue、この部分は実行されません。

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

したがってnum2、入力されることはなく、空の文字列を解析しようとすると例外が発生します。

于 2012-07-30T20:29:42.583 に答える