【问题标题】:Why is the compiler giving me an unreachable statement? [duplicate]为什么编译器会给我一个无法访问的语句? [复制]
【发布时间】:2019-08-16 00:17:01
【问题描述】:

我的目标是创建一个字符串数组,并将其发送到不同的方法,它必须是一个字符串数组。由于我不知道要输入多少个字符串,我无法预测要使用多少个字符串,所以我使用的是 arrayList。但是当我尝试将 arrayList 转换为简单数组时,我的编译器中出现了无法访问的语句错误。

我在这里遇到了错误:

 String[] gradic = new String[lista.size()];

这是我的其余代码:

public static main(){
    Scanner in = new Scanner(System.in);
    System.out.println("Enter strings (empty line to end):");

    List<String> list = new ArrayList<String>();

    while (true){

        String x = in.nextLine();

        if (x.equals(" ")) continue;

        lista.add(x);
    }

    String[] x0 = new String[list.size()];
    lista.toArray(x0);

}

我想让arrayList变成一个String[]数组。

【问题讨论】:

  • while(true) 永远不会退出。你写了一个无限循环。根据用户的输入进行真正的检查,您在 while 条件中检查“他们写的内容”,而不是做一个 while true/break(你现在有continue。这只是跳到下一次迭代)
  • 你可能想要break而不是continue

标签: java arrays string arraylist while-loop


【解决方案1】:

如果您刚开始使用 Java 编程,请不要使用while(true),即使有适当的中断也不行。如果您想在用户输入特定内容时停止读取输入,对此进行测试

Scanner in = new Scanner(System.in);
System.out.println("Enter strings (empty line to end):");

List<String> list = new ArrayList<String>();

String input = "";

while (!input.equals(" ")) { // If this is your break condition: test for it.
    input = in.nextLine();
    if (!input.equals(" ")) {
      list.add(input);
    }
}

这会检查input 两次吗?是的。是“低效”吗?不是你应该关心的事情,甚至可以在这种代码中有意义地评论。这段代码应该对人类读者做什么?非常重要,这对于您将要编写一段时间的代码很重要。

【讨论】:

    【解决方案2】:

    您不能在没有break; 的情况下将while(true) 和代码after 放在循环中。一般来说,如果在编译期间条件评估为true,则给定while([condition])(例如与常量一样),那么如果在 while 之后有代码,则 while 循环必须有某种 break 语句。如果一段时间后没有代码,就可以了。

    【讨论】:

      【解决方案3】:

      这个循环没有任何break,所以程序走不出来:

      while (true){
      
          String x = in.nextLine();
      
          if (x.equals(" ")) continue;
      
          lista.add(x);
      }
      

      你可能想写:

      while (true){
          String x = in.nextLine();
          if (x.equals(" ")) break;
          lista.add(x);
      }
      

      【讨论】:

        猜你喜欢
        • 2016-03-30
        • 2011-04-17
        • 2016-11-24
        • 1970-01-01
        • 2019-03-20
        • 1970-01-01
        • 2023-04-06
        • 2019-12-21
        • 1970-01-01
        相关资源
        最近更新 更多