如果用户输入不正确,将捕获try-catch

时间:2015-08-20 00:31:02

标签: java

我想知道如何以某种方式执行此操作,以便用户可以选择不输入整数,并且如果用户没有输入整数,它将捕获它并重新提示它们而不结束程序。我需要扫描程序接受int和string类型。有没有办法做到这一点?或者解决它?

/* The following method asks a user to input a series of integers. 
 * The user can stop at any time buy entering "quit"
*/

public static void readSeries()
{ 
    int integer;
    Scanner scan = new Scanner(System.in);

    System.out.println("Please enter a series of integers. If you wish to stop, enter 'quit'. ");
    System.out.println();

try{
    while(true) 
    {
        System.out.println("Enter an integer: "); // asks user to enter an integer
        integer = scan.nextInt();

        if(scan.equals (0)){break;}             // allows user to stop entering numbers 
    }       

    } catch(NumberFormatException nfe){System.out.println("Invalid Entry!");}

}
}

1 个答案:

答案 0 :(得分:3)

首先打破你的要求。

首先,您需要能够从用户读取文本和int值。您需要能够这样做,因为您需要检查"退出"条件。因此,您应该使用Scanner#nextInt代替Scanner#nextLine,而不是使用String input = scan.nextLine();

int

接下来,您需要检查用户的输入,看看它是否符合"退出"是否有条件。如果没有,您需要尝试将输入转换为Integer value = null; //... if (escape.equalsIgnoreCase(input)) { exit = true; } else { try { value = Integer.parseInt(input); } catch (NumberFormatException exp) { System.out.println("!! " + input + " is not a valid int value"); } } 值并处理可能发生的任何转换问题

do-while

好的,一旦你有了这个工作正常,你需要将它包装在一个循环的一边,现在,因为我们必须至少循环一次,Integer value = null; boolean exit = false; do { System.out.print(prompt); String input = scanner.nextLine(); if (escape.equalsIgnoreCase(input)) { exit = true; } else { try { value = Integer.parseInt(input); } catch (NumberFormatException exp) { System.out.println("!! " + input + " is not a valid int value"); } } } while (value == null && !exit); 是合适的(检查退出条件循环结束时循环而不是开始)

value

因此,当循环存在时,null将是有效整数或null。您可能在想为什么这很重要。 int让我们知道他们不再是来自用户的有效值,否则您需要提出public Integer promptForInt(String prompt, Scanner scanner, String escape) { Integer value = null; boolean exit = false; do { System.out.print(prompt); String input = scanner.nextLine(); if (escape.equalsIgnoreCase(input)) { exit = true; } else { try { value = Integer.parseInt(input); } catch (NumberFormatException exp) { System.out.println("!! " + input + " is not a valid int value"); } } } while (value == null && !exit); return value; } 退出值,但如果用户选择将该值用作他们的值,会发生什么输入

好的,现在,我们需要让用户多次这样做,所以,这需要一个方法!

List<Integer> values = new ArrayList<>(25);
Integer value = null;
do {
    value = promptForInt("Please enter a series of integers. If you wish to stop, enter 'quit'. ", new Scanner(System.in), "quit");
    if (value != null) {
        values.add(value);
    }
} while (value != null);

System.out.println("You have input " + values.size() + " valid integers");

现在,您只需使用另一个循环就可以根据需要多次调用该方法

/* Firefox still caches the manifest with these headers */
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");