ArrayStoreException从1D数组列表转换为2D数组时

时间:2016-07-18 21:02:53

标签: java arrays 2d converter

我使用以下方法收到java.lang.ArrayStoreException错误:

public static int[][] getData(String path) throws IOException
    {
        // Read all
        CSVReader csvReader = new CSVReader(new FileReader(new File(path)));
        List<String []> list = csvReader.readAll();
        csvReader.close();

        // Convert to 2D array
        int[][] dataArr=list.toArray(new int[list.size()][]);

        for(int i = 0; i<3; i++)
        {
            for(int x = 0; x<3; x++)
            {


System.out.print(dataArr[i][x]);
        }
        System.out.println();
    }
    return dataArr;
}

它引用'// convert to 2D array'下的行作为问题,我尝试过各种各样的方法,我在其他问题中看到了这些工作,但无济于事! 代码引用 path 中的CSV文件,然后使用值填充2D数组。如果有一种比使用CSVReader更简单的方法,任何人都知道我很乐意看到它!我在这里找到了这个代码,并且我已经看到了其他几个关于它的帖子,但这似乎是最简单的,我不认为它会导致问题。

提前非常感谢。

3 个答案:

答案 0 :(得分:0)

您应该将字符串列表转换为字符串[] []:

// Convert to 2D array
String[][] dataArr=list.toArray(new String[0][0]);

答案 1 :(得分:0)

请注意.toArray()方法的文档:

  

引发 ArrayStoreException - 如果指定数组的运行时类型不是该类型的超类型   此列表中每个元素的运行时类型

在您的情况下,指定的数组是int[]类型,并且它不是列表中每个元素类型的超类型,String[]

修复程序可能取决于您需要的阵列类型。如果您需要字符串中的int[][],则需要迭代并构建int[][]。如果String[][]足够,那么您可以为String[][]方法提供新的.toArray()

答案 2 :(得分:0)

使用以下行:

int[][] dataArr=list.toArray(new int[list.size()][]);

您正试图在String[]中存储int[][],这是不允许的。并且由于数组在运行时检查它的组件类型,因此会出现异常。

如果您想将List<String[]>转换为int[][],则必须手动执行此操作:

int[][] dataArr = new int[list.size()][];

for(int i = 0; i < list.size(); i++) {
    dataArr[i] = new int[list.get(i).length];
    for(int j = 0; j < dataArr[i].length; j++) {
        dataArr[i][j] = Integer.parseInt(list.get(i)[j]);
    }
}