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

尽管有终止表达式,循环仍不会结束

怀洛华
2023-03-14

你好Stack overflow社区,

我的提示是:**“您将进行错误检查,以确保输入的小时在[0,23]范围内。继续询问用户,直到用户输入有效范围内的时间。

当我的程序有正确的整数输入(任何整数输入)时,它将正常工作。然而,如果我输入一个非整数,那么所有的东西都卡在一个无限循环中。

我做错了什么?

   import java.util.*;
public class Tester2 {
    int a; // any valid int number

public void loop() 
{
    Scanner sc = new Scanner(System.in);
    int x=0; // terminating int
    while(x==0) 
    {
        System.out.println("Enter 0-23: ");


            try
            {
                if(sc.hasNextInt()) 
                {
                    a=sc.nextInt();
                    if((a>=0&&a<=23)) 
                    {
                        System.out.println("Success! ");
                        x=1;
                    }
                    else 
                    {
                        System.out.println("Retry! ");
                        a=0;
                        x=0;
                    }
                }
            }
            catch (NumberFormatException ex) 
            {
                System.out.println("invalid input");
            }

        }

}

}

共有1个答案

戈华茂
2023-03-14

如果要读取的下一个元素不是有效整数,sc.hasNextInt()将返回false。但是,在这种情况下,代码中的任何一点都不会读取该元素。

sc.hasNextInt()为false时,应确保读取并丢弃此元素(在块中添加sc.next()就可以了)。

 类似资料:
  • 问题内容: 我很好奇:这两个循环实现之间在速度和性能上是否有所不同?假定 size() 方法返回处理一组元素的数组,集合或对象的长度(实际上是来自 XOM api)。 实施1: 实施2: 问题答案: 从性能的角度来看,没有什么区别。这是因为可以优化循环,以便内联size()查找,从而导致很小的性能差异。 主要区别在于循环时大小是否改变。第一种情况将尝试迭代固定次数。在第二种情况下,迭代次数将取决于

  • 我试图设计一个购物车,读取美元数额,然后打印这些值回来。然而,我的时循环不会终止,我的数组列表存储了错误的值。 结果应该是这样的: 但这是我的输出: while 循环不会终止,而是返回到第一个提示:“请输入商品价格,或 -1 退出:” 程序不断将“-1”计为数组列表的一部分。“-1”值应该充当“否”并终止向 arrayList 添加更多元素,但在我的代码中,它被吸收到 arrayList 中。我尝

  • 编辑:修正了缺少的“)”,对不起,这不是问题。是的,我在模式中使用了一个不区分大小写的标志。下面是一些更多的代码: Edit2:stribizhev在下面指出的问题是,我在中读取的字符串实际上是整个ASCII文件。

  • 问题内容: 在我的Python应用程序中,我需要编写一个与以分号()终止的或循环匹配的正则表达式;。例如,它应与此匹配: …但是不是这个: 乍一看,这似乎很琐碎,直到你意识到左括号和右括号之间的文本可能包含其他括号,例如: 我正在使用python.re模块。现在,我的正则表达式如下所示(我留了我的评论,以便你可以更轻松地理解它): 这对于上述所有情况都非常适用,但是一旦你尝试使for循环的第三部分

  • 问题内容: 在我用Swift编写的SpriteKit iOS游戏中,播放非常短的声音(约0.5秒)会产生打ic(如滞后)。在其他问题中,我读到我应该发出声音,就像以前那样。 我什至使用变量()在播放之前检查声音是否准备就绪。每当播放完()时,我也会重新准备声音。以下是代码的相关部分: 我不知道我在哪里犯了错误。我感觉我已经尝试了所有方法(包括但不限于:仅准备一次,在播放后立即准备,不使用变量,而只

  • 在我的spring boot应用程序中,我有一个组件,它有一个方法,在下面的无限循环中运行一些作业,实际上它检查数据库中的一些数据: