为什么编译器给我一个不可达的语句?

时间:2019-03-25 17:13:41

标签: java arrays arraylist unreachable-statement

我的目标是制作一个String数组,并将其发送给其他方法,它必须是一个string数组。由于我不知道将要输入多少个字符串,所以我无法预测将要使用多少个字符串,因此我正在使用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 []数组。

3 个答案:

答案 0 :(得分:1)

此循环没有任何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);
}

答案 1 :(得分: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 :(得分:0)

在循环后没有while(true)的情况下,您不能使break;的代码为 通常,如果条件评估为 true while([condition]) >在编译时(例如使用常量),如果while后面有代码,则while循环必须具有某种break语句。如果过一会儿没有代码,那就没问题了。