我正在使用java中的第六维String数组,并在手动填充第四维数组后,我想使用Array.fill()来节省自己的时间和繁琐的工作量。我尝试了很多在线"解决方案"以及for / enhanced for循环无济于事。我一直收到异常3130(线程中的异常" main" java.lang.ArrayStoreException:java.lang.String)。任何帮助或见解将不胜感激。
谢谢你, 编
这是我的代码:
String colors [] [] [] [] [] [] = new String [4] [4] [4] [4] [4] [4];
for (String[][][][][] Red : colors) {
Arrays.fill(Red, (String) "Red");
for (String[][][][][] Blue : colors) {
Arrays.fill(Blue, (String) "Blue");
for (String[][][][][] Green : colors) {
Arrays.fill(Green, (String) "Green");
for (String[][][][][] Yellow : colors) {
Arrays.fill(Yellow, (String) "Yellow");
}
for (String[][][][][] Orange : colors) {
Arrays.fill(Orange, (String) "Orange");
}
for (String[][][][][] White : colors) {
Arrays.fill(White, (String) "White");
}
答案 0 :(得分:1)
抛出这种类型的异常
表示已尝试将错误类型的对象存储到对象数组中。
(来自documentation)
要理解原因,首先要考虑代码的含义。
String[][][][][][]
是一个包含数组的数组数组,这些数组包含包含字符串的数组。是的。
当您使用增强的for循环迭代colors
时,您会删除最左边的层,Red
包含一个5维String数组,即一个包含数组的数组,该数组包含一个包含包含字符串的数组但Arrays.fill
并没有为你带走外层,而是试图用字符串填充最顶层,即一个包含4维数组的数组。这导致例外。
你需要做的是将数组洋葱层一层一层地打开并填充实际的字符串数组,如下所示:
String colors[][][][][][] = new String[4][4][4][4][4][4];
for(String[][][][][] layer1 : colors){ // Iterates over all 5D arrays in colors
for (String[][][][] layer2 : layer1){ //Iterates over all 4D arrays in the 5D arrays
for (String[][][] layer3 : layer2){ // 3D
for (String[][] layer4 : layer3){ // 2D
for (String[] actualArray : layer4){ //actual string arrays
Arrays.fill(actualArray, "something");
}
}
}
}
}
所以在这里你迭代所有的5D数组,迭代它们中的每一个的所有4D数组等,直到你最终使用`Arrays.fill
用字符串填充1D数组