如何进行选择性的gettext()

时间:2019-03-16 18:54:06

标签: java swing select gettext

我正在尝试制作一个货币兑换程序,但是如果第二个输入(此处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

2 个答案:

答案 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);



    }

});