如何停止程序崩溃?

时间:2019-10-14 00:46:41

标签: java validation

我希望用户输入数字以外的任何内容时,程序都不会崩溃。例如,如果有人输入随机字母,它应该显示一条消息,“输入无效,请输入一个有效的整数”。然后提示他们是否要继续。

public static void main(String[] args) throws IOException {

    BufferedWriter out = new BufferedWriter(new FileWriter("outDataFile.txt"));

    Scanner input=new Scanner(System.in);
    int choice = 0;
    String repeat;

    //Loop repeats program until user quits
    do
    {
        //Loop repeats until a valid input is found
        do
        {
            //Asks for number and reads value
            System.out.print("\nEnter an integer and press <Enter> ");
            choice = input.nextInt();

            //Prints error if invalid number
            if(choice <= 0)
                System.out.println("Invalid Input.");

2 个答案:

答案 0 :(得分:0)

有多种方法可以实现:

首先是捕获Scanner引发的异常,并标记循环以在捕获异常时继续进行。 这不是一个好习惯,因为InputMismatchExceptionString抛出的异常是未经检查的异常。这意味着可以通过if / else语句轻松找到此异常的原因。

在您的情况下,您应该尝试以String string = scanner.nextLine(); for (int i = 0; i < string; i++) { char ch = string.charAt(i); if (!Character.isDigit(ch)) { System.out.println("Input is not a number"); break; // stop the for-loop } } int input = Integer.parseInt(string); 的形式接收输入,然后验证输入是否看起来像数字:

每字符圈数:

String numericRegex = "[0-9]+";
String string = scanner.nextLine();

if (!string.matches(numericRegex)) {
    System.out.println("Input is not a number");
}
int input = Integer.parseInt(string);

RegEx方法:

attachments[].fileUrl   string  URL link to the attachment.
For adding Google Drive file attachments use the same format as in alternateLink property of the Files resource in the Drive API.

Required when adding an attachment.

writable

这些是解决问题的常用方法,现在取决于您如何控制遇到无效输入时重复执行的循环。

答案 1 :(得分:-1)

使用将捕获的简单try catch和简单的递归方法,例如:

import java.util.InputMismatchException; 导入java.util.Scanner;

public class Test
{
    public static void main(String[] args)
    {
        System.out.println(getUserInput());
    }

    private static int getUserInput()
    {
        int choice = 0;

        Scanner input = new Scanner(System.in);
        System.out.println("Enter a value");
        try
        {
            choice = input.nextInt();
        } catch (InputMismatchException exception)
        {
            System.out.println("Invalid input. Please enter a numeric value");
            getUserInput();
        }
        return choice;
    }
}