OK、私は Java で電卓を書いていて、a の入力をString
足し算メソッドに取り込んでいます。JButtons
にテキストを書き込むために使用しますJTextField
。
ユーザーが等号ボタンをクリックすると、実行したい相対的な操作が見つかります (演算子ボタンをクリックすると、int に特定の数値が設定されます (加算は 1 になります))。最初に を配列に変換してString
からchar
、文字が数値か演算子かを確認します。
電卓でできるようにするすべての計算 (加法、減法など) について、いくつかのメソッドを作成する予定です。次に、.append
メソッドを使用して、演算子ではない char を に書き込み、StringBuffers
それを String に変換し、後で double に変換します。次に、計算を実行し、結果を返します。
電卓を使用しようとすると、Eclipse は、java.lang.NumberFormatException
保持されている文字列を に変換しようとした行にStringBuffer
aを報告し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);