当前位置: 首页 > 知识库问答 >
问题:

尝试并捕获语句不会让我重试 [重复]

唐腾
2023-03-14

我不知道为什么try-catch语句不起作用:

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

public class Main {
    protected static int intNum;
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        while(true) {
            System.out.println("[Shopping List] This is the shopping list GUI by Endercy.");
            System.out.println("[Shopping List] Controls are here:");
            System.out.println("[Shopping List] Type 1 to create a Shopping List");
            System.out.println("[Shopping List] Type 2 to enter a Shopping List name to view its contents");
            System.out.println("[Shopping List] Type 3 Add an item to your shopping list");
            System.out.println("[Shopping List] Type 4 to remove an item from your shopping list");
            System.out.println("[Shopping List] Type 5 to add a price to one of your items in your shopping list");
            intNum = scanner.nextInt();
            switch(intNum) {
                case 1:
                    System.out.println("test");
                    break;
                case 2:
                    System.out.println("test test");
                    break;
                case 3:
                    System.out.println("test test test");
                    break;
                case 4:
                    System.out.println("test test test test");
                    break;
                case 5:
                    System.out.println("test test test test test");
                    break;
                default:
                    while(true) {
                        System.out.println("I'm sorry, but this number is not on our controls list. Try again!");
                            try {
                                intNum = scanner.nextInt();
                            } catch (InputMismatchException e) {
                                System.out.println("Invalid Number, try again!");
                                intNum = scanner.nextInt();
                            }
                        switch(intNum) {
                            case 1:
                                System.out.println("test");
                                break;
                            case 2:
                                System.out.println("test test");
                                break;
                            case 3:
                                System.out.println("test test test");
                                break;
                            case 4:
                                System.out.println("test test test test");
                                break;
                            case 5:
                                System.out.println("test test test test test");
                                break;
                        }
                    }
            }
            break;
        }
        System.out.println("Thanks for trying out this thingy");
    }
}

这是代码,我只是想做InputMismatchException,以防有人输入无效的东西,如283479234729472983472984723或字符串等。

但是当我运行它时,我输入了这样的内容,它不让我用扫描仪再试一次,它只是跳到:

Exception in thread "main" java.util.InputMismatchException: For input string: "879857294729847917412942472394724237492734923"
    at java.base/java.util.Scanner.nextInt(Scanner.java:2264)
    at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
    at com.endercy.challenges.java.arraylist.shoppinglist.Main.main(Main.java:19)

它没有给我进入另一个。

共有1个答案

孟德曜
2023-03-14

您应该将另一个try catch blok放到第一个scanner.nextInt方法中。我认为代码没有通过那里,并在那里抛出异常

 类似资料:
  • 鉴于: 我想尝试,并重试,连接到服务器3次才放弃。 我可以把整个try/catch放在一个循环中,但是这是否符合Java的“最佳实践”。从我对该主题的回忆来看,这将是对语句的误用。再说一次,我可能完全错了。你怎么认为?

  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 前几天,我在我们的一个项目中看到一些代码,它们使用try-catch并重新抛出捕获的异常,如下所示: 除了catch块中的异常之外,没有做任何其他操作,所以我甚至不确定它为什么会被抛出。我看不出再次抛出同一个异常并对该异常不做任何处理有什么好处。 如果重新抛出catch块中捕获的异常,C#如何处理?它是否陷入了无限抛接球循环?还是说它最终会放弃试一试?

  • 尝试执行简单的insert into语句,但出现外键关系错误。 我收到的错误是“无法添加或更新子行:外键约束失败('example_1010命令orders_ibfk1用户 ID) 引用用户用户 ID')” 我想我需要使用一个“in子句”来绕过约束,但我不认为我使用它是正确的。

  • 我正在使用下面的Java(Spring 2.0)代码从Web服务读取响应: 但是,如果myUrl Web服务返回HttpStatus。错误的_请求(400),未将其分配给myResponse并引发错误,因此没有ResponseBy,我需要将请求包装在try-catch块中。这是正确的还是有办法解决这个问题?此外,这是否意味着myUrl Web服务永远不应该故意(通过编程)将myResponseOb

  • 问题内容: 如何在catch块中实现代码? 问题答案: 不建议这样做,这可能会在程序中引起严重的问题。例如,如果数据库关闭了怎么办? 但是,这是循环执行的方法: 更新: 令人失望的先生在下面的评论中提到:该方法将执行暂停指定的毫秒数。没有错误是完全随机的,大多数错误只能通过 再次尝试 才能起作用,因为两次尝试之间的时间有所变化。暂停执行线程将为发生这种情况提供更大的机会(例如,数据库引擎有更多的启