【问题标题】:Calculator produces empty String error for calculation method in Java计算器为Java中的计算方法产生空字符串错误
【发布时间】:2012-07-28 13:30:21
【问题描述】:

好的,我正在用 Java 编写一个计算器,我将 String 输入到我的加法方法中。我使用JButtons 将文本写入JTextField

当用户单击等号按钮时,我会找到他们想要执行的相对操作(如果他们单击运算符按钮,我会将 int 设置为特定数字(因此加法为 1))。我首先将String 转换为char 数组,然后检查字符是数字还是运算符。

我计划为我要使计算器能够进行的所有计算(加法、减法等)编写几种方法。然后我使用.append 方法将不是运算符的字符写入StringBuffers,然后我将其转换为字符串,然后再进行双打。然后我执行计算,并返回结果。

当我尝试使用计算器时,Eclipse 会在我尝试将保存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);

【问题讨论】:

  • 正确的缩进对可读性大有帮助...
  • 我写了34 + 0的计算。c1持有34,c2为空

标签: java swing methods jtextfield calculator


【解决方案1】:

由于gtrue,这部分永远不会执行:

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

因此,num2 永远不会被填充,并且您会在尝试解析空字符串时遇到异常。

【讨论】:

  • 谢谢! :) 我现在没有时间 2 测试它,我会回来 2 u tmrw
  • 我重新编写了程序,现在可以正常工作(至少对于添加而言)。谢谢 4 指出不可能的陈述 - 我不知道我为什么这样做:)
  • @imulsion:学习过程的所有部分。很高兴帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 1970-01-01
  • 2011-10-31
相关资源
最近更新 更多