public class TestArray {
public static void main(String []args) {
if(args.length<3) {
System.out.println("please:java test \"n1\"\"op\"\"n2\"");
System.exit(-1);
}
  

     try{ 
        double  d1 = Double.parseDouble(args[0]);
 double  d2 = Double.parseDouble(args[2]);
        } catch ( NumberFormatException e){
   e.printStackTrace();
          System.out.println("請檢查你輸入的數據");
  }       double  d =0;
if(args[1].equals("+") )d = d1+d2;
else if(args[1].equals("-")) d = d1-d2;
else if(args[1].equals("x")) d = d1*d2;
       else if(args[1].equals("/")) d = d1/d2;
else {
System.out.println("number error");
System.exit(-1);
}
System.out.print(d);}
}
................................
问题是想检查输入的数据是不是输入DOUBLE 型的,可是TRY...CATCH...编译不通过,删除了TRY...CATCH是能够通过的,请问为什么会这样子呢,为什么呢

解决方案 »

  1.   

    public class TestArray{    public static void main(String[] args) {
            if (args.length < 3) {
                System.out.println("please:java test \"n1\"\"op\"\"n2\"");
                System.exit(-1);
            }        double d1 = 0;
            double d2 = 0;        try {
                d1 = Double.parseDouble(args[0]);
                d2 = Double.parseDouble(args[2]);
            } catch (NumberFormatException e) {
                e.printStackTrace();
                System.out.println("請檢查你輸入的數據");
                System.exit(-1);
            }        double d = 0;
            if (args[1].equals("+")) {
                d = d1 + d2;
            } else if (args[1].equals("-")) {
                d = d1 - d2;
            } else if (args[1].equals("x")) {
                d = d1 * d2;
            } else if (args[1].equals("/")) {
                d = d1 / d2;
            } else {
                System.out.println("number error");
                System.exit(-1);
            }
            System.out.print(d);    }
    }
    注意d1和d2的作用域,再就是如果数据错误就不能进行下面的运算了。可以直接选择退出。
      

  2.   

    你把 double d1 跟 d2  定义在 try 块里面了.这样在try 块 外面就不可见..    把声明放在外面. 赋值放在里面就好.. 
    public class TestArray {

    public static void main(String[] args) {
    double d1=0;//我把他们放在这里了.  现在可以通过了..  
    double d2=0;
    if (args.length < 3) {
    System.out.println("please:java test \"n1\"\"op\"\"n2\"");
    System.exit(-1);
    } try {
    d1 = Double.parseDouble(args[0]);
        d2 = Double.parseDouble(args[2]);
    } catch (NumberFormatException e) {
    e.printStackTrace();
    System.out.println("請檢查你輸入的數據");
    } double d = 0;
    if (args[1].equals("+"))
    d = d1 + d2;
    else if (args[1].equals("-"))
    d = d1 - d2;
    else if (args[1].equals("x"))
    d = d1 * d2;
    else if (args[1].equals("/"))
    d = d1 / d2;
    else {
    System.out.println("number error");
    System.exit(-1);
    }
    System.out.print(d); }
    }
      

  3.   


    没错,是变量的作用域错误引起的。
    但d2的非零检查没有,还会抛异常出来的。
    逻辑判断不完善。想使用好try{}catch{},应该包括大的处理才行。其实,try{}catch{} 本可以没有的,但大部分人不考虑异常处理,所以java和c#都带上了。总结:C++中,变量都有作用域的,同时它的生命周期也基本类似。除了,那些static变量。
      

  4.   

    try catch分别都是一个作用域,你的d1在try快中定义的,就不能在try快外使用