我使用以下方法收到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更简单的方法,任何人都知道我很乐意看到它!我在这里找到了这个代码,并且我已经看到了其他几个关于它的帖子,但这似乎是最简单的,我不认为它会导致问题。
提前非常感谢。
答案 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]);
}
}