Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java NumberFormatException被else语句覆盖_Java_Exception - Fatal编程技术网

Java NumberFormatException被else语句覆盖

Java NumberFormatException被else语句覆盖,java,exception,Java,Exception,因此,我在这里遇到的问题是,我的NumberFormatException被我的else语句覆盖,因此每当传递字符串时,它不会被“调用”,而是返回无效的参数数 public class Ex4 { public static void main(String[] args) { try{ if(args.length == 1){ double temp = Double.parseDouble(args[0]); Syst

因此,我在这里遇到的问题是,我的
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
,但是在存在大量无效参数的情况下该怎么办

注意:我确实理解它为什么会失败,但是我不知道如何克服这个问题,我已经努力了,并在这期间继续这样做,任何支持都会很好

编辑2:要求输入和结果输出的人员:

  • JavaEX4 3
    将打印
    3.0
  • javaex4322
    将打印
    12.0
  • JavaEX4 5 1
    将打印
    5.0
  • java Ex4 A B C D
    将打印字符串
    “无效操作”
  • java Ex4 3 2 5 6
    将打印
    “参数数无效”
  • JavaEX4
    将打印
    “参数数无效”
为将来工作的任何人更新的代码:

 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");
        }  
    }      
公共类Ex4{
公共静态void main(字符串[]args){
双时差[]=新双时差[args.length];
布尔控制=真;
试一试{
对于(int i=0;i3&&cont==true){
System.out.println(“参数数无效”);
}  
}      

}异常由
Double.parseDouble(字符串)
引发。如果不调用它,则不会引发异常

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

然后用try-catch检查这是否是一个有效的数字


这是正确的。

继续之前,请检查错误情况

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);
} 

您的输入示例是什么?3将打印3.0 | | | | | | | 3 2 2将打印12.0 | | | | | | | 5 1将打印5.0 | | | | | | | | | D将打印字符串“无效操作数”| 3 2 2 5 6将打印“无效参数数”| | | | | | | | | 124,由way@ToastAndJam好的。现在告诉我们您对这个调用的预期输出。@cricket_007同意,我喜欢
开关(arg.length)
用于根据参数长度变化的逻辑,但是这里,循环是godd。这意味着,我需要避免将其解析为double,直到if语句完成之后,并且在try/catch语句之外?@ToastAndJam这是您的逻辑,由您决定。但如果以后再进行分析,您将不知道要解析多少值。不,这是正确的,不是最好的实现,但是正确的感谢OP执行他的
Ex4
;)提供了一个尝试,所以这不是一个纯粹的家庭作业,谢谢!在进入代码的主要部分之前,我从未想过检查错误条件。再次感谢。我同意,我会提供改进的想法,而不是代码本身。那是all@Toast尽早捕获无效条件始终是一种好的做法,而不是假设用户输入处于有效状态并解决该问题