繁体   English   中英

用户输入字符串而不是整数输入时捕获错误

[英]Catching error when a user enters a string instead of an integer input

我希望代码在用户输入字符串而不是整数时捕获错误。 您可以看到我尝试了一个try catch块,但仍然无法正常工作。 除此之外,其他一切都很完美。 我该如何解决?

输出结果如下:

Welcome to the Squares and Cubes table

Enter an integer: five
Error! Invalid integer. Try again.
Enter an integer: -5
Error! Number must be greater than 0
Enter an integer: 101
Error! Number must be less than or equal to 100
Enter an integer: 9

Number  Squared Cubed
======  ======= =====
1       1       1
2       4       8
3       9       27
4       16      64
5       25      125
6       36      216
7       49      343
8       64      512
9       81      729

Continue? (y/n): y

Enter an integer: 3

Number  Squared Cubed
======  ======= =====
1       1       1
2       4       8
3       9       27

这是代码:

import java.util.InputMismatchException;
import java.util.Scanner;

public class cube2 {

    public static void main(String[] args)
    {
        // Welcome the user
        System.out.println("Welcome to the Squares and Cubes table");
        System.out.println();

        Scanner sc = new Scanner(System.in);
        String choice = "y";

        do
        {
            // Get input from the user
            System.out.print("Enter an integer: ");
            int integer = sc.nextInt();


                 try {

                    break;
                }
                catch (NumberFormatException e) {
                    System.out.println("Error! Invalid integer. Try again.");
                }



            System.out.print("Enter an integer: ");
            integer = sc.nextInt();  





             if(integer<0){

                System.out.println("Error! Number must be greater than 0");
                System.out.print("Enter an integer: ");
                integer = sc.nextInt();

            }

             if(integer>100){

                System.out.println("Error! Number must be less than or equal to 100");

                System.out.print("Enter an integer: ");
                integer = sc.nextInt();
            }

            // Create a header
            String header = "Number  " + "Squared " + "Cubed   " + "\n"
                        +   "======  " + "======= " + "=====   ";
            System.out.println(header);

            int square = 0;
            int cube = 0;

            String row = "";
            for (int i = 1; i <= integer; i++)
            {

                square = i * i;
                cube = i * i * i;

                row = i + "       " + square + "       " + cube;
                System.out.println(row);
            }

            // See if the user wants to continue
            System.out.print("Continue? (y/n): ");
            choice = sc.next();
            System.out.println();

        }
        while (!choice.equalsIgnoreCase("n"));  
    }
}

为了避免混淆,我对您的代码做了一些更改并将其整体发布了:

public static void main(String[] args) {
    // Welcome the user
    System.out.println("Welcome to the Squares and Cubes table");
    System.out.println();
    Scanner sc = new Scanner(System.in);
    String choice = "y";

    do {
        int integer = Integer.MAX_VALUE;
        while (integer == Integer.MAX_VALUE) {
            // Get input from the user
            System.out.print("Enter an integer: ");
            String input = sc.nextLine();
            try {
                integer = Integer.parseInt(input);
            }
            catch (NumberFormatException e) {
                System.out.println("Error! Invalid integer. Try again.");
            }
        }
        if(integer<0){

            System.out.println("Error! Number must be greater than 0");
            System.out.print("Enter an integer: ");
            integer = sc.nextInt();

        }

        if(integer>100){

            System.out.println("Error! Number must be less than or equal to 100");

            System.out.print("Enter an integer: ");
            integer = sc.nextInt();
        }

        // Create a header
        String header = "Number  " + "Squared " + "Cubed   " + "\n"
                +   "======  " + "======= " + "=====   ";
        System.out.println(header);

        int square = 0;
        int cube = 0;

        String row = "";
        for (int i = 1; i <= integer; i++)
        {

            square = i * i;
            cube = i * i * i;

            row = i + "       " + square + "       " + cube;
            System.out.println(row);
        }

        // See if the user wants to continue
        System.out.print("Continue? (y/n): ");
        choice = sc.next();
        System.out.println();

    } while (!choice.equalsIgnoreCase("n"));
}

这个想法是让您在循环内进行另一个操作while直到用户传递整数为止。

Integer.parseInt方法是将String转换为int,如果无法将字符串转换为int类型,则引发NumberFormatException

应该是这样的:

    System.out.print("Enter an integer: ");
    Scanner sc =new Scanner(System.in);

    try {
        int integer = Integer.parseInt(sc.nextLine());
    } catch (NumberFormatException e) {
        System.out.println("Error! Invalid integer. Try again.");
    }

您可以使用此方法来测试输入的值是否为有效整数。 根据此结果,您可以从其他验证开始

public boolean isInt(string input) {
    try {
      Integer.parseInt(text);
      return true;
    } catch (NumberFormatException e) {
     return false;
     } 
    }

使用此getInput(scanner); 从用户获取输入的方法。 这将处理异常并递归调用自身,直到用户输入数字为止。

public static int getInput(Scanner sc) {
    int integer=0;
    try {
        System.out.print("Enter an integer: ");

        integer = Integer.parseInt(sc.nextLine());
    }       
    catch (Exception e) {
        System.out.println("Error! Invalid integer. Try again.");
        getInput( sc);
    }

    return integer;
}

对该函数的调用将类似于int integer = getInput(sc);

修改之后,您的代码将如下所示:

public class cube2 {

    public static int getInput(Scanner sc) {
        int integer=0;
        try {
            System.out.print("Enter an integer: ");

            integer = Integer.parseInt(sc.nextLine());
        }       
        catch (Exception e) {
            System.out.println("Error! Invalid integer. Try again.");
            getInput( sc);
        }

        return integer;
    }

    public static void main(String[] args)
    {
        // Welcome the user
        System.out.println("Welcome to the Squares and Cubes table");
        System.out.println();

        Scanner sc = new Scanner(System.in);
        String choice = "y";

        do
        {


            int integer = getInput(sc); // To get the Numeric input from Console

            if(integer<0){

                System.out.println("Error! Number must be greater than 0");
                System.out.print("Enter an integer: ");
                integer = sc.nextInt();

            }

            if(integer>100){

                System.out.println("Error! Number must be less than or equal to 100");

                System.out.print("Enter an integer: ");
                integer = sc.nextInt();
            }

            // Create a header
            String header = "Number  " + "Squared " + "Cubed   " + "\n"
                    +   "======  " + "======= " + "=====   ";
            System.out.println(header);

            int square = 0;
            int cube = 0;

            String row = "";
            for (int i = 1; i <= integer; i++)
            {

                square = i * i;
                cube = i * i * i;

                row = i + "       " + square + "       " + cube;
                System.out.println(row);
            }

            // See if the user wants to continue
            System.out.print("Continue? (y/n): ");
            choice = sc.nextLine();
            System.out.println();

        }
        while (!choice.equalsIgnoreCase("n"));  
    }
}

在您的代码中choice = sc.next(); 更改为choice = sc.nextLine();

输出:

Welcome to the Squares and Cubes table

Enter an integer: 9
Number  Squared Cubed   
======  ======= =====   
1       1       1
2       4       8
3       9       27
4       16       64
5       25       125
6       36       216
7       49       343
8       64       512
9       81       729
Continue? (y/n): y

Enter an integer: hi
Error! Invalid integer. Try again.
Enter an integer: hello
Error! Invalid integer. Try again.
Enter an integer: 5
Number  Squared Cubed   
======  ======= =====   
Continue? (y/n): y

Enter an integer: 12
Number  Squared Cubed   
======  ======= =====   
1       1       1
2       4       8
3       9       27
4       16       64
5       25       125
6       36       216
7       49       343
8       64       512
9       81       729
10       100       1000
11       121       1331
12       144       1728
Continue? (y/n): 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM