调用 Scanner.close() 会抛出 nosuchelementException

2023-11-30

我有一个简单的方法,可以将命令打印到屏幕上,扫描用户的输入,并将其作为字符串返回。如果用户的输入无效,它会通知用户并再次询问。此方法运行良好,但我的导师提到我们应该始终关闭资源,因此我返回并添加了 close 方法,现在每次调用该方法时,无论用户输入如何,我都会收到 NoSuchElementException。这是代码...

private String getUserString(String userCommand) {
    System.out.println(userCommand);
    Scanner scan = new Scanner(System.in);
    String userinput = scan.nextLine().trim();

    if (userinput.isEmpty()){
        System.out.println("Invalid choice");
        return getUserString(userCommand);
    }

    else {
        return userinput;
    }
}

异常总是指向用户输入作为 scan.nextLine().trim() 启动的行 注意* 我在每个 return 语句之前的每一行添加了 scan.close() ,但是我没有在上面包含它。


当你关闭时scan你正在关闭System.in当您尝试重新读取它时,它会抛出异常。

你的导师一方面是对的,你应该清理资源,只是not到那个时刻System.in.


您可以创建自己的输入,而不是每次需要输入时重新打开流Scanner一次并在需要输入的地方重复使用它:

public static void main(String[] args) throws IOException {
    Scanner scan = new Scanner(System.in);
    System.out.println(getUserString("Write something:", scan));
    System.out.println(getUserString("Write something else:", scan));
}

private static String getUserString(String userCommand, Scanner scan) {

    System.out.println(userCommand);

    String userinput = scan.nextLine().trim();

    if (userinput.isEmpty()) {
        System.out.println("Invalid choice");
        return getUserString(userCommand, scan);
    } else {
        return userinput;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

调用 Scanner.close() 会抛出 nosuchelementException 的相关文章

  • MP3:一种以毫秒为单位获取任何给定字节位置的位置的方法?

    我创建了一个 servlet 它返回从客户端请求的任何给定字节位置开始的流 来自 MP3 文件 这允许客户端在任何给定字节位置立即开始播放 而无需进行任何本地查找 现在 我有一个滑块可以直观地显示进度 我正在使用当前字节位置来更新滑块 但是
  • 检查双精度值的等于和不等于条件

    我在比较两者时遇到困难double values using and 我创建了 6 个双变量并尝试进行比较If健康 状况 double a b c d e f if a b c d e f My code here in case of t
  • 如何打印整个字符串池?

    我想打印包含文字的整个字符串池String使用添加的对象intern 就在垃圾收集之前 JDK有没有隐式的方法来进行这样的操作 我们如何检查字符串池 EDIT The comment suggests that there may be a
  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • Java 泛型/类型调度问题

    考虑以下程序 import java util List import java util ArrayList public class TypeTest public static class TypeTestA extends Type
  • Google Inbox 类似 RecyclerView 项目打开动画

    目前 我正在尝试实现 Google Inbox 例如RecyclerView行为 我对电子邮件打开动画很好奇 我的问题是 该怎么做 我的意思是 他们使用了哪种方法 他们用过吗ItemAnimator dispatchChangeStarti
  • Clojure MySQL 语法错误异常(“[...] 靠近 '???????????????' [...]”)

    除了建立连接之外 我在使用 clojure contrib sql 做任何事情时都遇到困难 我有一个 mysqld 在 localhost 3306 上运行 数据库名为clj db 用户 clj user localhost 和密码 clj
  • 服务器到 Firebase HTTP POST 结果为响应消息 200

    使用 Java 代码 向下滚动查看 我使用 FCM 向我的 Android 发送通知消息 当提供正确的服务器密钥令牌时 我收到如下所示的响应消息 之后从 FCM 收到以下响应消息 Response 200 Success Message m
  • @EnableTransactionManagement 的范围是什么?

    我试图了解正确的放置位置 EnableTransactionManagement多个 JavaConfig 上下文的情况下的注释 考虑以下场景 我在 JPAConfig java 和 AppConfig java 中有 JPA 配置以及一组
  • 尝试在没有 GatewayIntent 的情况下访问消息内容

    我希望每当我写一条打招呼的消息时 机器人都会在控制台中响应一条消息 但它只是给我一个错误 JDA MainWS ReadThread WARN JDA Attempting to access message content without
  • 具有多种值类型的 Java 枚举

    基本上我所做的是为国家编写一个枚举 我希望不仅能够像国家一样访问它们 而且还能够访问它们的缩写以及它们是否是原始殖民地 public enum States MASSACHUSETTS Massachusetts MA true MICHI
  • 在 AKKA 中,对主管调用 shutdown 是否会停止其监督的所有参与者?

    假设我有一位主管连接了 2 位演员 当我的应用程序关闭时 我想优雅地关闭这些参与者 调用supervisor shutdown 是否会停止所有参与者 还是我仍然需要手动停止我的参与者 gracias 阻止主管 https github co
  • OpenJDK 版本控制

    上下文 我想确保我们系统上安装的 Java 不受 CVE 2022 21449 的影响 java version 给出 openjdk version 11 0 7 2020 04 14 LTS OpenJDK Runtime Enviro
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • 重写Object类的finalize()方法有什么用?

    据我所知 在java中如果我们想手动调用垃圾收集器 我们可以执行System gc 1 我们在重写的finalize 方法中做了哪些操作 2 如果我们想手动调用JVM垃圾收集器 是否需要重写finalize 方法 我们在重写的 Finali
  • Java 推断泛型类型

    我正在寻找类似的推断捕获泛型类型的概念 类似于以下方法片段 但不是捕获泛型类型的类 public

随机推荐

  • 从另一个 Glassfish(Web-Container)访问另一个 Glassfish(EJB-Container)中运行的远程 EJB

    我想使用两台独立的服务器 一台用于 Web 容器 一台用于 ejb 容器 这两个容器都是 Glassfish V3 但是 如何在我的 Web 项目中使用 EJB 注释来访问远程 ejb container 的 ejb 在 Ejb 2 0 中
  • 在终端上切换 GitHub 帐户时遇到问题

    自从我将任何东西推送到 GitHub 以来已经有一段时间了 我最初在计算机上设置了帐户 一切运行良好 然后我将我的帐户更改为客户的帐户 这样我就可以将代码推送到他们的私人存储库 已经有一段时间了 现在我要改回旧帐户 但遇到了麻烦 我生成了一
  • 当上游有事件时,为什么有一个可用的“事件”变量而没有定义?

    我今天偶然发现了一个奇怪的行为 基本上 我有一个绑定到 knockout js 单击事件的函数 该函数利用了淘汰事件 但没有明确将其作为参数 this myClickHandler function console log event ev
  • 从子字符串中包含特定字符的字符串中提取单词

    在 MS Excel 中 我想使用公式从文本中包含特定字符 的单元格中仅提取单词 A2 多莉给我做了一个自制的蛋糕和一些松饼 A3 晚餐我们吃了奶酪 蛋糕 A4 每个人都喜欢面包店制作的美味 蛋糕 A5 约翰尼昨晚自己做了晚餐 然后打扫了厨
  • xlink 的 jQuery 选择器

    a xlink href coastline attr class grey a xlink href onshore attr class blue light 这就是我目前必须选择具有 xlink 的每个项目 coastline然后把它
  • 有没有办法很好地去除标签?

    有没有办法隐藏这个标签栏 附 不确定这个问题是否属于 stackoverflow 好的 我自己通过编写 VS 扩展来完成此操作 还将标题栏和菜单栏切换为自动隐藏 现在我的 VS 终于有了一个简约的视图 GitHub VS画廊
  • 如何在字典中打印换行符?

    我正在尝试通过字典创建一个查询 如下所示 Name name ID id Date of Birth dob 第二name是用户通过 raw input 输入的预设值 同样对于id和dob 这是我当前的代码 students id nNam
  • 是否可以预先评估 bash 的 PS1 中的值?

    我正在尝试构建一个 Bash 提示符 其中包含我的 git 分支信息 使用 git 的 bash completion 中的 git ps1 和一个小彩色笑脸来指示最近运行的命令是否成功 笑脸是使用这种技术创建的 我在这里找到了这样的技术
  • 如何使用 jquery mobile 创建 100% 高度的 div?

    如何创建 id test 高度为 100 的 div div div h1 Title h1 div div div div div div
  • OptaPlanner,Score计算速度会太低

    运行我的 optaplanner 项目并得到以下输出 看来有两个问题 这些输出是什么意思 第一个是 Score calculation speed will be too low because move thread s destroy
  • 如何在PHP中使mysql查询不断刷新?

    我正在制作一个基本的聊天室 我的代码 conn 127 0 0 1 root mymessages stmt SELECT FROM posts ORDER BY timestamp LIMIT 100 result mysqli quer
  • 将 jQuery 加载到 Django 中

    我有一个非常基本的问题 我正在尝试将一些 AJAX 功能构建到 Django 项目中 我打算使用 jQuery 现在 我只是通过 Linux 在本地运行代码 我一直在测试一些代码here所以我相当确定它是有效的 但我无法确定将 jQuery
  • com.android.support:appcompat-v7 和设计版本 23.2.0 崩溃包裹错误

    我在我的应用程序中使用了几个来自 android 支持的库 并在它们可用时更新它们 在版本 23 2 0 的测试期间 当我更改 Android 6 上的应用程序权限时 我遇到了崩溃 如您所知 当用户禁用权限时 会重新创建应用程序 与设备旋转
  • Android:图像绕中心旋转

    我正在尝试围绕中心旋转图像 这通常使用 RotateAnimation 工作 但我想让它更快一点 我现在使用带有单独绘图线程的 SurfaceView 模式 这是正确绘制位图的代码 取决于外部 标题 航向 角度 以度为单位 位图 位图 w
  • cmake 检测哪个库 libc++ 或 libstdc++ 配置为针对 g++ 或 clang++ 使用

    我写了一个CMakeLists txt构建一个项目g or clang 为了捕获尽可能多的错误 我同时使用了两者libc with D LIBCPP DEBUG2 2 for clang and libstdc with D GLIBCXX
  • 将 pandas multiindex 系列转换为 Json python

    嗨 我有两个类似于下面的熊猫系列 PnL Product Name Price Company A Orange 3000 Company B Apple 2000 Grapes 1000 Tax Product Name Price Co
  • 在 React Native 中更改 TouchableOpacity 的颜色

    谁能帮我 这是我的源代码 https snack expo io rJFgyPDpH 想法是 如果我点击 1 Button 它应该是 红色 如果我点击 2个按钮 也应该将其颜色更改为 红色 但是 1 个按钮 应将其更改为默认颜色黑色 然而
  • 快速获取 2 个日期之间的月份总数

    如何获得两个日期之间的总月份 这是约会的正常方式 1 开始日期 2020 2 22 10 25 00 2 结束日期 2020 3 3 12 34 00 let diffInDate Int Calendar current dateComp
  • 如何解析Controller中的Service Provider?

    我试图更好地理解服务容器在 Laravel 中的工作原理 所以我知道服务是用来拥有 Laravel 设置的你想要使用的东西 对吗 我正在尝试使用 LDAP php 内置函数制作一个简单的示例 我的里面有这个AppServiceProvide
  • 调用 Scanner.close() 会抛出 nosuchelementException

    我有一个简单的方法 可以将命令打印到屏幕上 扫描用户的输入 并将其作为字符串返回 如果用户的输入无效 它会通知用户并再次询问 此方法运行良好 但我的导师提到我们应该始终关闭资源 因此我返回并添加了 close 方法 现在每次调用该方法时 无