如何抛出一个不能终止程序的IllegalArgumentException?

时间:2016-07-22 17:45:08

标签: java exception try-catch throw

好的,所以我有一个带有switch语句的方法但是我遗漏了其余的情况,因为它们并不重要。在我的main方法中,调用operator方法并传递参数" selection"在他们选择" Q"之前的一个循环中。

当用户输入负数时,它应抛出异常,打印消息,忽略其输入,然后循环回到开头。抛出此异常时,它会终止程序。任何帮助将非常感谢。谢谢!

public static void operator(String selection) throws IllegalArgumentException{
    Scanner input = new Scanner(System.in);
    double price;
switch(selection){
case "A":
     System.out.println("Enter the price");
        if(input.nextDouble()<0){
            throw new IllegalArgumentException("Price cannot be a negative value");
        }
        else{
            price = input.nextDouble(); 
        }
break;

case"Q":
  System.exit(0);
}
}

3 个答案:

答案 0 :(得分:3)

IllegalArgumentException继承自RuntimeException,因为它不会停止你的程序,你可以只使用一个简单的try {} catch {},但我不建议使用Runtime Exceptions。如果是这种情况,请创建自己的Exception,继承自java.lang.Exception。

你可以在这里使用try catch。

这样的事情应该有效:

public static void operator(String selection) {
Scanner input = new Scanner(System.in);
double price;
switch(selection){

case "A":
 System.out.println("Enter the price");
     try {
        if(input.nextDouble()<0) {
            throw new NegativePriceException();
        }
     } catch (NegativePriceException e) {
        System.out.println("The price can't be negative.");
        e.printStackTrace();
     }

    price = input.nextDouble(); 
    break;

case"Q":
  System.exit(0);
}
}

要创建自己的Exception类,你基本上需要从Exception继承(如果你想使用try catch)或者从RuntimeException继承(如果你想让它停止你的程序运行),就像这样:

public class NegativePriceException extends Exception {

  public NegativePriceException() {
     super();
  }
}

答案 1 :(得分:1)

Java要求您处理或声明所有异常。如果您没有使用try / catch块处理异常,则必须在方法的签名中声明它。

在main方法中,您应该处理异常

public static void main(String args[]) {
//codes
try{
operator("A");
}
catch(IllegalArgumentException e){
e.printStackTrace();
}
}

答案 2 :(得分:0)

您已经就如何处理异常获得了一些好的答案。

对于您的情况,我不认为异常是恰当的。您应该完全摆脱异常,只需通过打印错误消息并请求新输入来处理问题输入。

例外是针对特殊情况,它们不应该是正常执行代码的一部分。