我正在java中处理第六维字符串数组,在手动填充第四维数组后,我想使用Array.fill()来节省自己的时间和繁琐的工作量。我已经尝试了许多在线“解决方案”以及 for/enhanced for 循环,但均无济于事。我不断收到异常 3130(线程“main”java.lang.ArrayStoreException 中的异常:java.lang.String)。任何帮助或见解将不胜感激。
谢谢你, 编辑。
这是我的代码:
字符串颜色[][][][][][] = 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");
}
最佳答案
该类型的异常被抛出
indicate that an attempt has been made to store the wrong type of object into an array of objects.
(来自documentation)
要理解原因,您首先必须考虑该代码的含义。
String[][][][][][]
是一个由数组组成的数组,其中包含包含字符串的数组。嗯是的。
当您使用增强的 for 循环迭代 colors
时,您会去掉最左边的层,并且 Red
包含一个 5 维字符串数组,即包含包含一个数组的数组,该数组包含一个包含字符串的数组。但是 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 数组
关于java - java中的第六维字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40568027/