Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.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异常处理专用性_Java_Exception - Fatal编程技术网

Java异常处理专用性

Java异常处理专用性,java,exception,Java,Exception,我认为如果我先展示我的代码,那么解释我的问题会更容易,所以这里是: import java.util.Scanner; public class a{ public static void main(String[]args){ Scanner s = new Scanner(System.in); System.out.print("Enter either a, b, or c: "); try{ String

我认为如果我先展示我的代码,那么解释我的问题会更容易,所以这里是:

import java.util.Scanner;
public class a{
    public static void main(String[]args){
        Scanner s = new Scanner(System.in);
        System.out.print("Enter either a, b, or c: ");
        try{
            String a = s.nextLine();
            if (!a.equalsIgnoreCase("a")&&!a.equalsIgnoreCase("b")&&!a.equalsIgnoreCase("c")){
                throw new IllegalArgumentException();
            }
            System.out.print("Entered letter: "+a);
        }
        catch (IllegalArgumentException b){
            System.out.println("Invalid input. Only enter a, b, or c.");
        }
    }
}
我的问题是,有没有办法制作三(3)条不同的catch语句,以便在用户输入的错误消息中指定

  • a、b或c以外的其他字母
  • 非字母字符(数字或符号)或
  • 空白处

  • 我想到的数字错误是NumberF

    而不是创建三个单独的catch块,您可以将
    catch修改为:

    try {
        String a = s.nextLine();
        if (!a.equalsIgnoreCase("a") && !a.equalsIgnoreCase("b") && !a.equalsIgnoreCase("c")) {
            throw new IllegalArgumentException(a);                 // observe this
        }
        System.out.print("Entered letter: " + a);
    } catch (IllegalArgumentException ex) {
        String input = ex.getMessage();
    
        // check for spaces
        if (input.trim().length() == 0) {
            System.out.println("Only black spaces entered");
        } 
    
        // check for numeric/special characters
        else if (input.matches("^[0-9!@#$%^&*()_+\\-=\\[\\]{};':\"\\\\|,.<>\\/?]*$")) {
            System.out.println("User entered a non-letter character (number or symbol)");
        } 
    
        // check if it isn't a, b or c
        else if ((!input.trim().matches("a|b|c"))) {
            System.out.println("User entered value other than a, b or c");
        }
    }
    
    试试看{
    字符串a=s.nextLine();
    如果(!a.equalsIgnoreCase(“a”)和&!a.equalsIgnoreCase(“b”)和&!a.equalsIgnoreCase(“c”)){
    抛出新的IllegalArgumentException(a);//注意这个
    }
    系统输出打印(“输入字母:+a”);
    }捕获(IllegalArgumentException ex){
    字符串输入=例如getMessage();
    //检查是否有空格
    if(input.trim().length()==0){
    System.out.println(“仅输入黑色空格”);
    } 
    //检查数字/特殊字符
    else if(input.matches(“^[0-9!@$%^&*()\+\-=\[\\]{};”:\“\\\\\\\,.\/?]*$”){
    System.out.println(“用户输入非字母字符(数字或符号)”;
    } 
    //检查它是否不是a、b或c
    如果(!input.trim().匹配(“a | b | c”)),则为else{
    System.out.println(“用户输入的值,而不是a、b或c”);
    }
    }
    
    请注意:

  • 我们在抛出 例外情况
  • catch
    块中,我们获取用户输入的值 然后根据一些if条件打印出所需的 例外情况

  • 您可以根据自己的方便调整catch逻辑中的条件,我希望您能理解其中的含义。此外,您可以创建一个单独的方法来处理异常,并从catch块调用它。

    您可以将一个带有详细信息的消息参数传递给
    IllegalArgumentException()
    。我明白了,这看起来是解决我原来问题的更好办法。但是有没有办法指定用户输入的不是a、b或c的字母?我指的是第三个区别。a)空格,b)字母,但不是a、b或c;c)非字母字符(数字或符号)是的。你可以包括一个匹配数字和符号的正则表达式,还可以包括另一个
    if
    块。也许我可以把它作为练习留给你?我不知道正则表达式是什么。也许我应该从那里开始。去搜索我已经通过包括该问题的答案让你的生活变得轻松了,看一看!不过,我推荐你学习一点正则表达式以完全理解编辑。