【问题标题】:Java Cast Error While Looping Through Integer List? [closed]循环整数列表时出现Java Cast错误? [关闭]
【发布时间】:2016-04-30 12:41:38
【问题描述】:

我正在制作一个循环整数列表的程序(简单,duh)。问题是,当我循环并尝试将 Integer 列表转换为 String 列表时,我收到 java.lang.String cannot be cast to java.lang.Integer 错误。是的,字符串到整数错误,而不是整数到字符串错误。我不知道为什么或如何发生这种情况,我需要有关如何解决它的帮助。

我如何定义列表:

public List<Integer> killsList;
killsList = new ArrayList<Integer>();

我如何调用方法:

gc.setList("playerKills", gc.getStringListFromIntegerList(plugin.killsList));

我如何添加值:

plugin.killsList.add(1);

错误发生在for (Integer num : list) { 行...

代码:

public ArrayList<String> getStringListFromIntegerList(List<Integer> list) {

    ArrayList<String> newList = new ArrayList<String>();

    plugin.console.sendMessage(list.toString());

    for (Integer num : list) {

        newList.add(String.valueOf(num));
        plugin.console.sendMessage(String.valueOf(num));

    }

    return newList;

}

例子:

public List<Integer> killsList;
killsList = new ArrayList<Integer>();

plugin.killsList.add(kills);

gc.setList("playerKills", gc.getStringListFromIntegerList(plugin.killsList));

public ArrayList<String> getStringListFromIntegerList(List<Integer> list) {

    ArrayList<String> newList = new ArrayList<String>();

    plugin.console.sendMessage(list.toString());

    for (Integer num : list) {

        newList.add(String.valueOf(num));
        plugin.console.sendMessage(String.valueOf(num));

    }

    return newList;

}

【问题讨论】:

  • 我将假设问题出在 for 循环语句中(?)。尝试将 num 转换为字符串,然后在所述循环中将其转换为整数。因为强制转换失败是有道理的,所以您请求一个整数来保存 List 的值
  • 如果我尝试将num 设为字符串,则会收到一个编译错误,希望我将其改回整数。我以前循环过这样的列表(通常是字符串列表),没有问题。
  • 这篇文章:stackoverflow.com/questions/18524/… 基本上有我正在使用的确切代码,但没有得到错误。
  • ........你用什么确切地填充它?这很关键。
  • @AngryCupcake274 由于我们一无所知,您能否发布一个发生错误的完整示例? (请先删除所有不需要重现错误的代码)

标签: java string arraylist integer


【解决方案1】:

难道在将变量list 传递给上述函数之前,将其从字符串列表中转换为(List&lt;Integer&gt;) stringList,而stringList 的类型是List&lt;String&gt;

【讨论】:

  • @AngryCupcake274 您能否也说明一下您是如何调用上述方法的?泛型参数中的某处必须有错误的转换。您没有收到有关不安全泛型转换的编译时警告吗?
【解决方案2】:

您的问题还不够充分的概念证明。这是我的mcve 使用您的代码来尝试捕获您的错误:

import java.util.ArrayList;
import java.util.List;

public class Foo {
    public static void main(String[] args) {
        List<Integer> killsList;
        killsList = new ArrayList<Integer>();
        for (int i = 0; i < 10; i++) {
            killsList.add(i);
        }

        ArrayList<String> strList = getStringListFromIntegerList(killsList);
        System.out.println(strList);
    }

    public static ArrayList<String> getStringListFromIntegerList(List<Integer> list) {
        ArrayList<String> newList = new ArrayList<String>();
        // plugin.console.sendMessage(list.toString());
        for (Integer num : list) {
            newList.add(String.valueOf(num));
            // plugin.console.sendMessage(String.valueOf(num));
        }
        return newList;    
    }
}

它返回无错误:

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

您的错误存在于您没有向我们展示的代码中的其他地方,我的猜测是通过某种方式将一个字符串放入输入列表中。要解决它,您需要创建并发布一个有效的 MCVE,它会向我们显示错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-11
    • 2013-03-14
    • 1970-01-01
    相关资源
    最近更新 更多