1

这是我为从文本框中获取文本、将它们解析为双数据类型并打印它们的产品而编写的代码。那么,是否有任何替代方法可以将字符串解析为 double 并处理其异常......?

...........
    public void actionPerformed(ActionEvent ae){
        try{
            if(ae.getSource()==b1 || ae.getSource()==t2){
                String s1=t1.getText();
                String s2=t2.getText();
                double x=Double.parseDouble(s1);
                double y=Double.parseDouble(s2);
                double z=x*y;
                t3.setText(""+z);
            }
            if(ae.getSource()==b2){
                t1.setText(null);
                t2.setText(null);
                t3.setText(null);
                t1.requestFocus(true);
            }
        }catch(NumberFormatException nfe){
            JOptionPane.showMessageDialog(this,"Please Enter Proper Number in the TextFields");
        }
    }
...............
4

4 回答 4

0
String s1 = t1.getText();
    try {
        double x = Double.parseDouble(s1);
    } catch (NumberFormatException  ex) {
        JOptionPane.showMessageDialog(this,"Please Enter Proper Number in the t1 TextField");
        return;
    }
    String s2 = t2.getText();

    try {
        double y = Double.parseDouble(s2);
    } catch (NumberFormatException  ex) {
        JOptionPane.showMessageDialog(this,"Please Enter Proper Number in the t2 TextField");
        return;
    }
于 2013-06-03T07:25:57.773 回答
0

是您知道如何在您的情况下处理此类异常。没有其他方法可以为您处理异常。您的代码是正确的,这是大多数程序员所做的。您可以使用JFormattedTextField,但它也不能为您处理异常。

于 2013-06-03T07:19:21.677 回答
0

恕我直言,不,

如果您看到文档

公共静态双 parseDouble(String s) 抛出 NumberFormatException

即使有任何快捷方式,它也会使用上述方法,并且显然这也会引发相同的异常。

于 2013-06-03T07:19:37.777 回答
0

为了避免在解析字符串以获取数字(或双倍,在您的情况下)时处理异常,您可以将NumberFormatParsePosition结合使用,如下所示:

import java.text.NumberFormat;
import java.text.ParsePosition;

public class TestClass
{

   public static void main(String[] args)
   {     
      System.out.println("Parse test 10.00 ---> " + parseNumber("10.00"));
      System.out.println("Parse test \"\" ---> " + parseNumber(""));
      System.out.println("Parse test 10 ---> " + parseNumber("10"));
      System.out.println("Parse test shgdfhsaghdga ---> " + parseNumber("shgdfhsaghdga"));
   }

   private static boolean parseNumber(String input)
   {
      NumberFormat fmt = NumberFormat.getInstance();
      ParsePosition pos = new ParsePosition(0);
      fmt.parse(input, pos);
      return input.length() != 0 && (input.length() == pos.getIndex());      
   }

}

输出

Parse test 10.00 ---> true
Parse test "" ---> false
Parse test 10 ---> true
Parse test shgdfhsaghdga ---> false

如果数字是有效字符串,则 ParsePosition 对象的索引将到达字符串的末尾。否则,它将在第一个无效位置结束。最后一个 return 语句检查这个条件。您可以使用该parseNumber()方法在将字符串解析为双精度之前预先验证您的字符串。

于 2013-06-03T07:42:03.330 回答