线程“AWT-EventQueue-0”中的异常java.lang.NumberFormatException:对于输入字符串:“”

时间:2014-08-20 07:50:58

标签: java

我制作了一个程序来计算方形圆和矩形

的面积
int W=0;
int X=0;
int Y=0;
int Z=0;
int A1=0;
int A2=0;
int A3=0;

//从用户

获取输入
String A=TF1.getText();
String B=TF2.getText();
String C=TF3.getText();
String D=TF4.getText();

//将其转换为整数

W=Integer.parseInt(A);
X=Integer.parseInt(B);
Y=Integer.parseInt(C);
Z=Integer.parseInt(D);

//使用值来计算面积

  A1=W*W;
  A2=X*Y;
  A3=(3*Z*Z);

//并根据所选选项显示

if (RB1.isSelected())
TF5.setText(" "+A1);
else if(RB3.isSelected())
TF5.setText(" "+A2);
else
TF5.setText(" "+A3);

//我也根据用户选择的选项使一些文本字段不可见

2 个答案:

答案 0 :(得分:1)

您正在尝试将空string转换为数字。如果用户未在textfield中输入任何内容,您的代码将从文本字段中检索空字符串,然后尝试使用Integer.parseInt进行转换。

您需要先检查所有字段是否为空;或者,在整个事物周围加try/catch,如果你抓到NumberFormatException,就中止计算。

当您抓住exception时,您可以向用户发出输入无效的警告。

答案 1 :(得分:1)

1)在命名时遵循编码约定,以便易于理解代码。 例如,String firstNumberString = firstTextBox.getText();看起来要好得多,而不是String A=TF1.getText();

2)您正在从每个文本框中检索文本并尝试解析它。但是,如果文本框中不包含任何内容,则Integer.parseInt()方法会抛出NumberFormatException,这种情况正在发生。

解决方案:验证TextBox中的文本。

private Boolean validateText(String str)
{
 if ( str == null || str.equals("") ) {
                return false;
            }

            char[] chars = str.toCharArray();
            boolean ok = true;

            for ( int i = 0; i < chars.length; i++ ) {

                try {
                    Integer.parseInt( String.valueOf( chars[i] ) );
                } catch ( NumberFormatException exc ) {
                    ok = false;
                    break;
                }


            }

           return ok;
}