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

While循环的.HasNext条件无限运行

田仲卿
2023-03-14

我知道这在StackOverflow上被问过很多次,但我尝试过很多不同的解决方案,没有一个奏效。所以我决定问问社区该怎么做。下面是我的代码中的相关片段。

public class Calculator
{
  public static void main(String[]args)
  {
     ArrayList<String> inputStorage = new ArrayList<String>();
     Scanner input = new Scanner(System.in);
     String rawInput;
     boolean mainLoop = true;

     String exitInput;
     String mainMenuInput;

     while(mainLoop == true)
     {
        mainMenuInput = input.nextLine()
        switch(mainMenuInput)
        {
           case "Expression":
               System.out.println("Type an expression");
               while(input.hasNext)
               {
                  rawInput = input.next();
                  inputStorage.add(rawInput);
               }
               break;

           case "Equation":
               System.out.println("Type an equation");
               while(input.hasNext)
               {
                  rawInput = input.next();
                  inputStorage.add(rawInput);
               }
               break;
          case "exit":
              System.out.println("Are you sure you want to exit")
              exitInput = input.nextLine();
              switch(exitInput)
              {
                 case "yes":
                 case "Yes":
                 mainLoop = false;

                 case "no":
                 case "No":
                 break;

                 default:
                 System.out.println("That was not an option")
                 break;
              }
          default:
                 System.out.println("That was not an option");
                 break;

        }
     }

请注意,这只是我的代码中从控制台输入的部分,不包含任何其他内容。我有其他东西设置,要求代码是这种格式。

  • 将Input.HasNext()替换为Input.HasNextLine()
  • 将input.hasnext()替换为input.next()!=null
  • 如果INPUT.NEXT=空,则设置退出条件
  • 如果输入,则设置退出条件。next()=“\n”
  • 如果输入,则设置退出条件。next()=“\r”

下面是一个列表,其中列出了对我的其余代码不起作用的东西:

  • BufferedReader(及其所有方法和方面)
  • 将Input.Next()替换为Input.NextLine()

共有1个答案

颛孙钱青
2023-03-14

由于您的扫描器正在处理打开的流(system.in),因此无法确定此流不在创建和发送更多数据的过程中,这意味着它无法返回false

  • 此流将关闭
  • 我们将接收表示流结束的数据。

正因为如此

while(input.hasNext()){
    ...
}
for (int i = 0; i < N; i++){
    ...
    rawInput = input.next();
    ...
}

在只想处理一行标记的情况下,您可以首先读取该行,然后使用单独的扫描程序对其进行标记

Scanner lineScanner  = new Scanner(input.nextLine());
while(lineScanner.hasNext()){
    rawInput = lineScanner.next();
    inputStorage.add(rawInput);
}
 类似资料:
  • 我正在尝试编写使用Scanner类从用户那里获取输入的代码。但是hasNext()、hasNextInt()和hasNextLine()每次都会运行无限循环。

  • 不知道如何阻止这个while循环无限重复。我使用检查用户输入是否为int。如果没有输入int值,则循环将无限重复。

  • 这是一个类的简单程序,它以分钟为单位提示用户他或她淋浴的时间长度(作为正整数,根据需要重新提示),然后打印同等数量的水瓶(作为整数)。 假设淋浴器每分钟使用1.5加仑水(192盎司),塑料瓶大小为16盎司 我的do-while循环成功地拒绝了负数和0,但是,如果我输入“foo”这样的文本,当提示输入淋浴的长度(以分钟为单位)时,程序将进入无限循环,永远运行该循环并打印“How long is yo

  • 编辑:重新措辞 我有一个账户列表:帐户 当我总结这份清单时,我得到了账户数量和账户总价值的概述 名称摘要 我添加了马克,因为他现在将是一个帐户所有者,但他目前没有任何帐户。 第一步是查看每个人应该拥有的账户的平均数。有25个账户,5个所有者,所以每个人都应该有5个账户。总价值为15600英镑,共有5名所有者,因此每个人的账户价值应该在3120英镑左右。这是一个估计值,所以我对它稍微偏离一点没意见。

  • Q.while循环条件是作为一个整体进行计算,还是在决定是否进入循环之前一次计算一个条件?

  • 我正在尝试制作一个简单的程序,它使用扫描器进行输入,并有一个while循环,该循环继续输入,直到输入结束字符为止。我想让扫描器接受输入并将一个字符串添加到堆栈列表中。我试图弄清楚为什么这段代码在键入空格时不终止while循环。