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尽早捕获无效条件始终是一种好的做法,而不是假设用户输入处于有效状态并解决该问题