首页 > 解决方案 > 循环异常处理

问题描述

我正在尝试在循环中使用 try-catch 语句,以便要求用户输入正确的值,直到完成。我目前正在一个 while(true) 循环内执行此操作,但这已被我们的讲师劝阻和限制。谁能用一段示例代码告诉我另一种方法?

我知道这不是最有效的方法。但截至目前,这是我的问题。任何帮助,将不胜感激

class Players {
    private static Map<String, Integer> golferInfo = new LinkedHashMap<>(Main.playCount);
    static Scanner uInput = new Scanner(System.in);

    static void addPlayers(String player) {
        String newPlayer = player;

        while (true) {
            try {
                if (!golferInfo.containsKey(newPlayer)) {
                    golferInfo.putIfAbsent(newPlayer, 0);
                    break;
                } else {
                    System.out.println("Name currently exists please enter a new name");
                    newPlayer = uInput.next();
                }
            } catch (InputMismatchException e) {
                System.out.println("Please enter an appropriate name");
            }
        }
    }
}

标签: javaloopsexception

解决方案


基本上,您将if语句用作循环不变量,而不是循环的条件本身。为了弥补这一点,您可以反转if语句的逻辑,将扫描保持在循环内,try/catchnewPlayer在成功扫描后将 放入循环后的列表中。因此,我认为您可以使用以下代码:

while (golferInfo.containsKey(newPlayer)) {
    System.out.println("Name currently exists please enter a new name");
    try {
        newPlayer = uInput.next();
    } catch (InputMismatchException e) {
        System.out.println("Please enter an appropriate name");
    }
}
golferInfo.putIfAbsent(newPlayer, 0);

推荐阅读