为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

不负相思意 2021-12-22 19:23:04
我希望代码在用户输入字符串而不是整数时捕获错误。您可以看到我尝试了一个仍然无法正常工作的 try catch 块。除此之外,其他一切都很完美。我该如何解决这个问题?这是输出应该如何:Welcome to the Squares and Cubes tableEnter an integer: fiveError! Invalid integer. Try again.Enter an integer: -5Error! Number must be greater than 0Enter an integer: 101Error! Number must be less than or equal to 100Enter an integer: 9Number  Squared Cubed======  ======= =====1       1       12       4       83       9       274       16      645       25      1256       36      2167       49      3438       64      5129       81      729Continue? (y/n): yEnter an integer: 3Number  Squared Cubed======  ======= =====1       1       12       4       83       9       27
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

我稍微更改了您的代码并将其作为一个整体发布,以避免混淆:


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在你的循环中创建另一个并运行它直到用户传递一个整数。


查看完整回答
反对 回复 2021-12-22
?
三国纷争

TA贡献1804条经验 获得超7个赞

Integer.parseInt方法是将 the 转换String为 int 并NumberFormatException在字符串无法转换为int类型时抛出 a 。


应该是这样的:


    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.");

    }


查看完整回答
反对 回复 2021-12-22
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

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


public boolean isInt(string input) {

    try {

      Integer.parseInt(text);

      return true;

    } catch (NumberFormatException e) {

     return false;

     } 

    }


查看完整回答
反对 回复 2021-12-22
  • 3 回答
  • 0 关注
  • 173 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信