使用扫描仪时无限循环? [复制]

2023-12-24

boolean z = false;
do {
    try {
        a = sc.nextInt();
        z = true;
    }
    catch(Exception e) {
    }
}
while(!z);

尝试这个。如果您第一次尝试使用整数,它会正确执行。但是,如果您输入错误的文本类型,即使您接下来输入 int 并跳过将布尔值分配给 true,它也会变成无限循环。为什么是这样?


您的问题是由于未处理行尾标记,因此扫描仪处于挂起状态。你想做这样的事情:

import java.util.Scanner;

public class Foo2 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = 0;
        boolean catcher = false;
        do {
            try {
                System.out.print("Enter a number: ");
                a = sc.nextInt();
                catcher = true;
            } catch (Exception e) {
            } finally {
                sc.nextLine();
            }

        }
        // !!while(catcher == false);
        while (!catcher);

        System.out.println("a is: " + a);
    }
}

另外, while (z == false) 是不好的形式。使用 while (!z) 会更好。这可以防止 while (z = false) 错误,并且是表达此错误的更简洁的方式。

编辑马塞洛:

马塞洛,感谢您的投入和建议!您是说下面 if 块中的条件不会更改布尔值 spam 的值吗?

  boolean spam = true;

  if (spam = false) {
     System.out.println("spam = false");
  }

  System.out.printf("spam = %b%n", spam);

因为如果它确实改变了它,如果编码员打算编写 if (spam == false),那么他们不会期望这种情况,那么这可能会产生微妙且危险的副作用。再次感谢您帮助我澄清这一点!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用扫描仪时无限循环? [复制] 的相关文章

随机推荐

  • iOS 设备 UDID 区分大小写吗?

    这是关于将设备添加到配置门户以进行临时测试 一个客户给我发了一个带有大写字符的 UDID 我没有检查就愚蠢地添加了它 无线部署不起作用 我想知道这是否是原因 但我想在用完我的 100 个分配之一之前先检查一下 Yes UDIDs区分大小写
  • 为什么 linq-2-sql 会创建额外的不必要的对象?

    我在数据库中有一个简单的父子表 如下所示 CREATE TABLE Parent Id int IDENTITY 1 1 NOT NULL Name nvarchar 256 NOT NULL ALTER TABLE Parent ADD
  • 使用 C# 突出显示 Docx 中的文本

    我需要突出显示 docx 文件中的一个句子 我有这段代码 并且它对于许多文档都可以正常工作 但我注意到对于某些文档 文档中的文本是逐字设置的 而不是整个句子 我的意思是每个单词它自己的Run 所以当搜索该句子时 找不到它 因为它在docx中
  • 使用 Eclipse 部署到 AppEngine 时出错

    每当我尝试将 Web 应用程序部署到 Google App Engine 时 无论女巫应用程序如何 甚至是演示应用程序 我都会遇到此问题 当我尝试部署时立即发生错误 错误是这样说的 部署到 AppEngine 时出错 部署到 App Eng
  • 如何在 Windows 上通过命令行以全屏视图打开 pdf?

    我可以使用以下命令通过命令行打开 pdf 文档 start test pdf 但我想通过命令行以全屏模式打开它 有人知道该怎么做吗 这应该可以做到 start max c nameofpdf pdf 这样做的优点是 如果用户使用非 adob
  • 如何从 pandas 数据帧计算 jaccard 相似度

    我有一个数据框如下 框架的形状是 1510 1399 列代表产品 行代表用户为给定产品分配的值 0 或 1 我怎样才能计算jaccard similarity scores 我创建了一个占位符数据框 列出了产品与产品 data ibs pd
  • AccessDenied:用户无权执行:cloudfront:CreateInvalidation

    我正在尝试使用 ember cli deploy 和 ember cli deploy cloudfront 将 ember 应用程序部署到 AWS CloudFront 我在 AWS 中设置了存储桶和用户 并为我的用户提供了 Amazon
  • 如何处理 Angular 2 中的模板错误(和其他错误)?

    当 Angular 2 中出现模板错误时 整个应用程序将无法工作 是否应该只有具有导致错误的模板的组件无法工作而应用程序的其余部分工作正常 如何处理错误以便应用程序在发生错误时不会停止响应 您可以使用自定义ErrorHandler http
  • 如何将 Kotlin 源文件转换为 Java 源文件

    我有一个 Kotlin 源文件 但我想将其转换为 Java 如何将 Kotlin 源代码转换为 Java 源代码 正如 Vadzim 所说 在 IntelliJ 或 Android Studio 中 您只需执行以下操作即可从 kotlin
  • 如何使用 View 的子级制作绘图动画,逐条绘制每条 Path 的线条?

    使用我在中找到的代码这个 StackOverflow 答案 https stackoverflow com a 61843394 3692177我成功地可以用手指在画布上绘制任何内容 并且在绘制时我会看到我绘制的内容 由此 我想创建一个在按
  • 来自守护程序的错误响应:未找到网络 myapp

    我正在尝试在多主机网络中创建一个容器 但在创建时出现此错误 Error response from daemon network myapp not found Here myapp是我创建的覆盖网络的名称 我正在使用的命令是 sudo d
  • Xcode 4 内部编译器错误:总线错误

    Xcode 4 0 1 开始出现内部编译器错误 它只是说 总线错误 它出现在我的一个 m 文件的底部 该文件现在几乎有 4000 行长 我看过这个问题 https stackoverflow com questions 5042256 in
  • StructureMap 和扫描组件

    因此 我有一个使用 StructureMap 的 NET 解决方案 并且我想让 StructureMap 读取一个外部程序集 该程序集实现该解决方案中项目的接口并为其定义注册表项 我的解决方案的 StructreMap 配置 ObjectF
  • 外部文件中的 JavaScript 未加载

    我有一个 JavaScript 问题 这个问题已经困扰我很长一段时间了 我有一个名为 search js 的外部文件 它与加载的 html 文件位于同一文件夹中 我在 HTML 中用来加载 javascript 文件的代码是 从我读过的所有
  • Postgres 函数总是返回一行

    我在 Postgres 中编写了以下函数 但遇到了一个问题 它总是返回一行 我的意思是 当没有用户匹配该对时 它会返回所有列为空的行 有没有办法让函数在没有结果时返回 0 零 行 CREATE OR REPLACE FUNCTION fin
  • Angular 2 全局常量提供程序注入器方法

    我有一个全局常量 例如根目录 我希望每个组件都可以访问它 在另一个 stackoverflow 问题中 答案是创建一个常量类并将其导入到每个组件中 有没有一种方法可以引导常量类 以便应用程序中的每个组件都可以访问它而无需任何额外的导入 到目
  • PHP:if (!$val) VS if (empty($val))。有什么区别吗?

    我想知道下面两种情况有什么区别 推荐哪一种 val 0 if val True if empty val It s also True 看看PHP类型对照表 http php net manual en types comparisons
  • @QueryParam 如何将没有值的参数转换为布尔值“false”?

    我想使用像这样的网址http www example com rest foo bar哪里的bar查询参数没有值 它的存在本身就应该表明变量是否是true or false 目前缺失值被假设为 空 并传递给new Boolean 将其视为f
  • XML(带有命名空间)到对象解组

    我从 Web 服务调用得到了以下响应 我尝试使用 JAXB 对其进行解组以将其映射到 java 类 这样做时我遇到了 unmarshal 异常
  • 使用扫描仪时无限循环? [复制]

    这个问题在这里已经有答案了 boolean z false do try a sc nextInt z true catch Exception e while z 尝试这个 如果您第一次尝试使用整数 它会正确执行 但是 如果您输入错误的文