我正在尝试制作一个货币兑换程序,但是如果第二个输入(此处s1)为空,则程序给出function oops(v: X | Y): string {
if (v instanceof X) {
return "its an X";
}
return assertNever(v); // error, v is Y, not never
}
。当first(s here)为空时,它起作用。因此,我想知道是否有其他方法可以通过一个按钮使其具有选择性。为什么在第二个字段为空时它不起作用?
NumberFormatException:Empty String error
答案 0 :(得分:0)
您可以在进行分析之前添加检查:
if (s1.isEmpty())
return;
失败是因为Double.parseDouble(String arg)
试图将作为参数传递的字符串转换为该字符串表示的Double。这表示像“ 12”,“ 12.0”等这样的字符串是有效输入,而像“ 12a”,“ ac”,“”等这样的字符串是有效输入。必然会失败;因为毕竟12a
不是双精度数(甚至不是数字!)。
如果文本字段为空并且您执行getText()
,则将检索的是""
(空字符串)而不是null
。
因此,如果您要做出任何条件决定,请根据检索到的文本为empty i.e. ""
而不是null
答案 1 :(得分:0)
您可以像写两次一样为同一按钮写addActionListener
,而不用写两次addActionListener
。
此外,请避免将任何字段保留为空,因为NumberFormatException
中的一个正在给出空白值或任何其他非double值,因此您将获得JTextField
。使用Double.parseDouble(“ 12.34”)进行解析时,应始终包含字符串格式的double值。与其他值一起解析会抛出NumberFormatException
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
String s=tf.getText(); //problem is here
double a=Double.parseDouble(s);
double c=a*5.44;
String result=String.valueOf(c);
tf2.setText(result);
}
});
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
String s1=tf1.getText();
//and here
double b=Double.parseDouble(s1);
double d=b*0.18;
String result1=String.valueOf(d);
tf3.setText(result1);
}
});
将上面的代码替换为:
bt.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent arg0) {
String s=tf.getText();
double a=Double.parseDouble(s);
double c=a*5.44;
String result=String.valueOf(c);
tf2.setText(result);
String s1=tf1.getText();
double b=Double.parseDouble(s1);
double d=b*0.18;
String result1=String.valueOf(d);
tf3.setText(result1);
}
});