java - 循环异常处理
问题描述
我正在尝试在循环中使用 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");
}
}
}
}
解决方案
基本上,您将if
语句用作循环不变量,而不是循环的条件本身。为了弥补这一点,您可以反转if
语句的逻辑,将扫描保持在循环内,try/catch
并newPlayer
在成功扫描后将 放入循环后的列表中。因此,我认为您可以使用以下代码:
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);
推荐阅读
- javascript - 如何使用bodyParser将文本解析为快速服务器中的json?
- c++ - 如何在 C++ 中构建 3x3 平移矩阵
- reactjs - 根据工作要求调整环境后,热重载停止工作
- angular - 在Angular中添加基于元素宽度的背景图像
- tensorflow - Keras 合身需要很多时间
- ruby-on-rails - 在 ruby 上安装 gtk2 gem
- angular - ngOnchange 不检测动态变化
- woocommerce - 删除仅添加到购物车的单个产品页面
- javascript - 我如何在反应打字稿中引用文档?
- azure-pipelines - Azure Pipelines:可以从管道资源而不是存储库资源中使用模板吗?