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是能够通过的,请问为什么会这样子呢,为什么呢
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是能够通过的,请问为什么会这样子呢,为什么呢
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的作用域,再就是如果数据错误就不能进行下面的运算了。可以直接选择退出。
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); }
}
没错,是变量的作用域错误引起的。
但d2的非零检查没有,还会抛异常出来的。
逻辑判断不完善。想使用好try{}catch{},应该包括大的处理才行。其实,try{}catch{} 本可以没有的,但大部分人不考虑异常处理,所以java和c#都带上了。总结:C++中,变量都有作用域的,同时它的生命周期也基本类似。除了,那些static变量。