无法将数据加载到二维数组中

时间:2016-03-24 10:06:47

标签: java multidimensional-array

我正在尝试将数据加载到二维数组中。 我的代码是

import java.util.Arrays;

public class MyClass {
    public static void main(String args[])
    {
        String[] datas=null;

        datas = new String[4];

        datas[0] = "abc,def,ghi";
        datas[1] = "1,2,3";
        datas[2] = "abc,def,ghi";
        datas[3] = "1,2,3";

        int cols = datas.length;
        int rows = datas[1].split(",").length;
        System.out.println("rows="+rows+" and cols="+cols);


        String[][] table_data= new String[cols][rows];
        for(int i=0;i<cols;i++)
        {
            System.out.println("came for " + i);
            table_data[cols] = datas[i].split(",");
        }

        System.out.println("Table Datas = " + Arrays.deepToString(table_data));

    }
}

但是我将索引超出绑定异常

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
    at MyClass.main(MyClass.java:24)

我尝试将声明更改为

String[][] table_data= new String[cols+1][rows+1];

它显示输出为

rows=3 and cols=4
came for 0
came for 1
came for 2
came for 3
Table Datas = [[null, null, null, null], [null, null, null, null], [null, null, null, null], [null, null, null, null], [1, 2, 3]]

但这不是我想要的输出。任何帮助都会非常充实。

3 个答案:

答案 0 :(得分:3)

在我看来,您必须使用table_data[row]更改table[i]

for(int i=0;i<cols;i++){
     System.out.println("came for " + i);
     table_data[i] = datas[i].split(",");
}

答案 1 :(得分:0)

table_data[cols-1] = datas[i].split(",");

因为您将数组设置为4列:

String[][] table_data= new String[cols][rows];

其中cols = 4,然后你尝试编辑索引4,它实际上是第5个元素(0,1,2,3,4)并且不存在:

table_data[cols] = datas[i].split(",");

但是因为这个分配发生在一个没有进一步代码的循环中:

for(int i=0;i<cols;i++)
{
    System.out.println("came for " + i);
    table_data[cols] = datas[i].split(",");
}

,无论如何都没有意义。正如另一位aswerer所写,你可能想写:

for(int i=0;i<cols;i++)
{
    System.out.println("came for " + i);
    table_data[i] = datas[i].split(",");
}

答案 2 :(得分:0)

您总是在写入数组的最后一个元素。您应该使用table_data[i]代替table_data[cols]