【问题标题】:How do i convert an ArrayList into a multidimensional Array?如何将 ArrayList 转换为多维数组?
【发布时间】:2013-04-27 06:53:23
【问题描述】:

这行代码向我抛出了异常: 线程“主”java.lang.IndexOutOfBoundsException 中的异常:索引:5,大小:5

String [][] employeeNamesA = new String [2][index];
for (int i = 0; i<index; i++)employeeNamesA[0][i] = employeeNames.get(i);

我正在尝试将 ArrayList 转换为多维数组。

【问题讨论】:

  • 如果数组大小为 5,则索引 0-4 可用。 5 超出范围。但是,如果你已经有一个列表,为什么还要创建一个多维数组呢?
  • 可能employeeNames 在索引i 处没有元素。
  • @jlordo 是对的。他超出了他的索引。
  • 因为在我的程序结束时我需要打印employeeNamesA[i][j] 中的项目,[i] 是员工姓名,[j] 是员工信息。如果有更简单的方法来完成,我很想学习,因为我还是 Java 编程的新手。我知道我会超出我的索引,但是我该如何纠正这个问题?
  • @BradJones:[i] 不能是员工姓名,因为它是对内部人员 String[] 的引用。只需编写一个Employee 类并将其覆盖为toString()

标签: java multidimensional-array arraylist


【解决方案1】:

正如 jlordo 所建议的,您应该只创建一个 Employee 类。

这是一个例子:

class Employee {

    String name;
    String info;

    public Employee(String n, String i) {
        name = n;
        info = i;
    }

    public String getName() {
        return name;
    }

    public void setName(String s) {
        name = s;
    }

    public String getInfo() {
        return info;
    }

    public void setInfo(String s) {
        info = s;
    }
}


List<String> nameList = // populate nameList
List<String> infoList = // populate infoList

List<Employee> employeeList = new ArrayList<Employee>();

for (int i = 0; i < nameList.size(); i++) {
    String name = nameList.get(i);
    String info = null;
    if (infoList.size() > i) {
        info = infoList.get(i);
    }
    Employee emp = new Employee(name, info);
    employeeList.add(emp);
}

现在您有了一个 Employee 对象列表,而不是一个愚蠢的多维数组。

请注意,我们在循环中检查infoList 的大小以避免IndexOutOfBoundsException

【讨论】:

    【解决方案2】:

    您的employeeNames 列表没有index 数量的元素。它很可能有 5,这意味着它会在 i = 5 时执行 employeeNames.get(i) 时抛出 IndexOutOfBoundsException

    【讨论】:

    • 这个是正确答案,其他的都错了,内维度不用初始化,第一行就已经做了。
    • +1,但你应该说 employeeNames list 而不是 array,因为他正在使用 get() 访问它
    • 是的,虽然它的名字是ArrayList。 :)
    • @Voicu:你怎么知道?他可能正在使用LinkedList 或任何其他List 实现;)
    • @Voicu:我应该从阅读标题开始 :) 无论如何,为了避免混淆,我仍然认为如果你用我的第一条评论编辑你的答案会更好。
    猜你喜欢
    • 2013-05-11
    • 2012-11-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 2011-08-24
    • 2019-04-03
    • 1970-01-01
    相关资源
    最近更新 更多