异常处理Java

异常处理Java,java,oop,exception,exception-handling,Java,Oop,Exception,Exception Handling,我正在学习异常处理,我想知道在以下情况下应该怎么做: 我希望我的输入是在一行,如:12 100(第一个是一个梳理,第二个是容量)。捕获异常的部分工作得很好(我主要希望防止用户输入错误类型的情况)。问题是,如果异常在第一个变量中,则程序会留下空行或打印错误,因为输入中仍然有一个或多个变量。这是我的密码: private static void newCard(Scanner in) { try{ String cardId; int cardCapa

我正在学习异常处理,我想知道在以下情况下应该怎么做:

我希望我的输入是在一行,如:12 100(第一个是一个梳理,第二个是容量)。捕获异常的部分工作得很好(我主要希望防止用户输入错误类型的情况)。问题是,如果异常在第一个变量中,则程序会留下空行或打印错误,因为输入中仍然有一个或多个变量。这是我的密码:

    private static void newCard(Scanner in) {
    try{
        String cardId;
        int cardCapacity;
        cardId = in.next();
        cardCapacity = in.nextInt();
    }
    catch(Exception e){
        System.out.println(WRONG_INPUT_TYPE);
    }
}

你能帮我一下吗?谢谢

要在一行中获取输入,您可以执行以下操作:

private static void newCard(Scanner in) {
    try {
        String cardId;
        int cardCapacity;
        String[] input = in.next().split(" ");
        cardId = input[0];
        cardCapacity = Integer.parseInt(input[1]);
    } catch(Exception e){
        System.out.println(WRONG_INPUT_TYPE);
    }
}

它的作用是读取用户输入(其完整行),然后根据空格分隔字段,从而在您的案例中生成两个元素的字符串数组。然后我们可以很容易地引用该数组中的任意一个元素。之后,我们使用Integer.parseInt()将字符串转换为int(因为我们之前得到的结果是一个字符串数组,还记得吗?)

一种方法:每行输入并拆分。然后在一个不同的
try catch
块中处理每个值,以保留异常,稍后将其抛出,如下所示:

Exception inputEx = null;   
try{
    String line = in.nextLine();
    String[] data = line.split("\\s+");
    try{ cardId = data[0]; } catch(Exception e){inputEx = e;}
    try{ cardCapacity = Integer.valueOf(data[1]); } catch(Exception e){inputEx = e;}
    if (inputEx != null) throw inputEx;
}
catch(Exception e){
    System.out.println(WRONG_INPUT_TYPE);
}