从一维数组列表转换为二维数组时出现 ArrayStoreException
ArrayStoreException When Converting from list of 1D arrays to 2D array
我在使用以下方法时遇到 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 文件,然后用值填充二维数组。如果有任何人都知道的比使用 CSVReader 更简单的方法,我很乐意看到它!我在这里找到了这段代码,我也看过其他几篇关于它的帖子,但这似乎是最简单的,我不认为它会导致问题。
提前致谢。
您应该将字符串列表转换为字符串[][]:
// Convert to 2D array
String[][] dataArr=list.toArray(new String[0][0]);
注意 .toArray()
方法的文档:
Throws: ArrayStoreException - if the runtime type of the specified array is not a supertype of the
runtime type of every element in this list
在您的例子中,指定的数组是 int[]
类型,并且不是列表中每个元素类型的超类型,即 String[]
.
修复可能取决于您需要什么类型的数组。如果您需要字符串中的 int[][]
,则需要迭代并构建 int[][]
。如果 String[][]
就足够了,那么您可以为 .toArray()
方法提供一个新的 String[][]
。
用线:
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]);
}
}
我在使用以下方法时遇到 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 文件,然后用值填充二维数组。如果有任何人都知道的比使用 CSVReader 更简单的方法,我很乐意看到它!我在这里找到了这段代码,我也看过其他几篇关于它的帖子,但这似乎是最简单的,我不认为它会导致问题。
提前致谢。
您应该将字符串列表转换为字符串[][]:
// Convert to 2D array
String[][] dataArr=list.toArray(new String[0][0]);
注意 .toArray()
方法的文档:
Throws: ArrayStoreException - if the runtime type of the specified array is not a supertype of the runtime type of every element in this list
在您的例子中,指定的数组是 int[]
类型,并且不是列表中每个元素类型的超类型,即 String[]
.
修复可能取决于您需要什么类型的数组。如果您需要字符串中的 int[][]
,则需要迭代并构建 int[][]
。如果 String[][]
就足够了,那么您可以为 .toArray()
方法提供一个新的 String[][]
。
用线:
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]);
}
}