【问题标题】:Java for-loop and compile error due to wrong datatype由于错误的数据类型,Java for-loop 和编译错误
【发布时间】:2015-01-24 15:19:32
【问题描述】:

今天我在Java中使用for循环时有一个奇怪的经历,我真的无法解释。这是我的代码 sn-p:

List<String[]> list;
....
for (String[] tmp : list.get(0)) {
...
}

这段代码 sn-p 没有编译,因为 list.get(0) 返回一个 String 而不是 Strings 的数组。但为什么呢?

【问题讨论】:

    标签: java arrays list compiler-errors iterator


    【解决方案1】:

    list.get(0) 返回一个由Strings 组成的数组,因此当您对其进行迭代时,您将获得单独的字符串:

    for (String tmp : list.get(0)) {
    ...
    }
    

    如果遍历整个列表,每次迭代都会得到一个 String 数组:

    for (String[] tmp : list) {
    ...
    }
    

    【讨论】:

    • 可以这么简单:我真的只是推理出了点问题。谢谢!
    【解决方案2】:

    尝试遍历字符串数组

    for (String[] tmp : list) {
    ...
    }
    

    或遍历第一个数组的字符串

    for (String tmp : list.get(0)) {
    ...
    }
    

    【讨论】:

    • 可以这么简单:我真的只是推理出了点问题。谢谢!
    【解决方案3】:
    for (String[] tmp : list.get(0))
    

    应该是

    for (String tmp : list.get(0))
    

    因为list.get(0) 是字符串数组,而不是字符串数组。

    【讨论】:

    • 可以这么简单:我真的只是推理出了点问题。谢谢!
    【解决方案4】:

    实际上,list.get(0) 并没有像您期望的那样返回 String 而是 String[]List&lt;String[]&gt; listListString[]list.get(0) 因此是String[]。问题在于您的循环变量。如果你循环一个String[],那么在循环期间保存单个元素的循环变量的类型就是String

    应该是:

    List<String[]> list;
    // ...
    for (String el : list.get(0)) {
        // ...
    }
    

    【讨论】:

    • 可以这么简单:我真的只是推理出了点问题。谢谢!
    【解决方案5】:

    当您调用 list.get(0) 时,它会返回一个字符串数组。如果我扩展您的代码,它将如下所示,

    String[] strArr = list.get(0);
    
    ....
    for (String[] tmp : strArr) { //compilation issue
    ...
    }
    

    显然这是错误的,因为 strArr 中的每个对象都是字符串,而不是字符串数组。

    【讨论】:

    • 可以这么简单:我真的只是推理出了点问题。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-09
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多