【问题标题】:Java program stuck after "for" loopJava 程序在“for”循环后卡住
【发布时间】:2018-08-26 17:15:19
【问题描述】:

我的 Java 程序在for-loop 之后似乎卡住了。它没有陷入循环,但程序只是出于某种原因不想走得更远。但是它成功完成了循环:

public static void main(String[] args){
    String[] command = new String[20];
    Scanner a = new Scanner(System.in);
    for (int i = 0; a.hasNext(); i++) {
        command[i] = a.next();
        System.out.println(i);
    }
    a.close();
    System.out.println("asd");
}

如果您输入 1 个单词,该程序将打印出 "0",如果输入 2,则打印出"0 1",依此类推,但 System.out.println("asd") 永远不会执行,而且程序永远不会停止。

【问题讨论】:

  • 将a.hasNext(); 更改为i < command.length;
  • 没有成功,问题仍然存在,但还是谢谢 :)
  • 你能告诉我们你的错误吗?如果您尝试Nikolas的代码,我相信这不会造成任何问题
  • 我没有任何运行时错误或其他任何东西,代码不会停止运行,但 for 循环执行得很好。 Nikolas 的解决方案也是如此
  • @Oceanis:既然您可以使用System.in,您必须向控制台提供输入 - 是吗?程序在command[i] = a.next() 行停止,直到出现输入。

标签: java arrays string for-loop


【解决方案1】:

程序永远不会终止,因为System.in 永远不会关闭,因此hasNext() 将永远为真,循环永远不会结束。

您可以要求用户输入特定字符以退出程序。

public static void main(String[] args) {
        String[] command = new String[20];
        Scanner a = new Scanner(System.in);
        for (int i = 0; a.hasNext(); i++) {
            command[i] = a.next();
            System.out.println(i);
            System.out.println("Do you want to continue? y/n");
            if(a.next().equals("n")){
                break;
            }
        }
        a.close();
        System.out.println("asd");
    }

【讨论】:

  • 问题中没有要求终止循环
【解决方案2】:

欢迎来到 StackOverflow :)

for-loop 的执行永远不会结束,因为a.hasNext() 始终是true。所以循环永远不会满足终止条件。出于这个原因,您必须在某些时候使用break(输入例如"EXIT")来退出无限循环或设置允许的最大值i - 你不是说command.length 来填充数组符合价值观吗?

for (int i = 0; i < command.length; i++) {
    command[i] = a.next();
    System.out.println(i);
}

【讨论】:

    【解决方案3】:

    该问题是由于程序再次等待您的输入而引起的,它从未卡住。此外,只有在超出数组大小(即用户输入超过 20 个令牌)时,您的代码才会以异常 (ArrayOutOfBoundException) 终止。

    如果要捕获数组索引中的每个单词,请使用

    String[] command = a.split(" ");

    这甚至可以避免导致不必要的混乱的 for 循环。

    【讨论】:

      【解决方案4】:

      检查 for 循环中的退出条件

      !a.next().equals("n")

      //
      
      public static void main(String args[])
      
           {
      
              String[] command = new String[20];
              Scanner a = new Scanner(System.in);
              for (int i = 0; a.hasNext() && !a.next().equals("n"); i++) {
                  command[i] = a.next();
                  System.out.println(i);
                  System.out.println("Do you want to continue? y/n");
      
              }
              a.close();       
      
           }
      

      【讨论】:

      • 问题中没有要求终止循环
      猜你喜欢
      • 2017-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-03-01
      • 1970-01-01
      • 2012-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多