由else语句重写的NumberFormatException

时间:2017-05-23 10:30:19

标签: java exception

所以我在这里遇到的问题是我的NumberFormatException被我的else声明覆盖了,因此它没有被称为'每当传递一个字符串并返回无效的参数数量时。

public class Ex4 {
      public static void main(String[] args) {


  try{
      if(args.length == 1){
          double temp = Double.parseDouble(args[0]);
          System.out.println(temp);
        } else if(args.length == 2){
              double temp = Double.parseDouble(args[0]);
              double temp1 = Double.parseDouble(args[1]);
              System.out.println(temp * temp1);
        } else if(args.length == 3){
             double temp = Double.parseDouble(args[0]);
             double temp1 = Double.parseDouble(args[1]);
             double temp2 = Double.parseDouble(args[2]);
             System.out.println(temp * temp1 * temp2);    
        } else {
            System.out.println("number of arguments invalid");
        }
    } catch(NumberFormatException e){
        System.out.println("invalid operation");
    }
 }}

所以我的问题是,我如何仍然使用NumberFormatException并检查通过args传递的值是否为有效值?

编辑:我可以删除会触发catch语句的else,但是如果有多个参数无效,我该怎么办?

注意:我确实理解为什么它会失败但是我不知道如何克服这个问题并且已经开始工作并且在此期间继续这样做,只要任何支持都会很棒。

Edit2:人们要求输入和产生的结果:

  • java Ex4 3将打印3.0
  • java Ex4 3 2 2将打印12.0
  • java Ex4 5 1将打印5.0
  • java Ex4 A B C D将打印字符串“invalid operation”
  • java Ex4 3 2 2 5 6将打印”number of arguments invalid"
  • java Ex4将打印”number of arguments invalid"

为将来工作的任何人更新了代码:

 public class Ex4 {
 public static void main(String[] args) {

  double temps[] = new double[args.length];
  boolean cont = true;
  try{
          for(int i = 0; i < args.length; i++){
      temps[i] = Double.parseDouble(args[i]);
    }
  } catch(NumberFormatException e){
      System.out.println("invalid operation");
      cont = false;
    }

        if(args.length == 1){
            System.out.println(temps[0]);
        } else if(args.length == 2){
            System.out.println(temps[0] * temps[1]);
        } else if(args.length == 3){
            System.out.println(temps[0] * temps[1] * temps[2]);
        } else if(args.length < 1 && cont == true || args.length > 3 && cont == true){
            System.out.println("number of arguments invalid");
        }  
    }      

}

2 个答案:

答案 0 :(得分:1)

在继续之前检查错误情况。

if(args.length > 3 || args.length == 0) {
    System.out.println("number of arguments invalid");
} else {
    double mult = 1.0;
    try {
        for (String arg : args) {
            mult *= Double.parseDouble(arg);
        } 
   } catch (...) { 
       // your message 
   } 
   System.out.println(mult);
} 

答案 1 :(得分:0)

Double.parseDouble(String)引发异常。如果你不调用它,就不会抛出任何异常。

所以你实际上正在检查if-else是否有足够的参数,这是好的。

然后使用try-catch,检查这是否是有效数字。

这是正确的。