有没有办法在3d数组中打印所有值?
这是我得到的但得到空指针异常:
int i = 2;
int x = 15;
String[][][] arrays = new String[x][x][i];
String arraytext = "hello";
for (String[][] row: arrays)
Arrays.fill(row, arraytext);
for (int a = 0; a<=x; a++){
for (int b = 0; b<=x; b++){
for (int j = 0; j<=i; j++)
{System.out.println(arrays[a][b][j]);}
}
}
答案 0 :(得分:4)
填充阵列时遇到问题。你到了
java.lang.ArrayStoreException: java.lang.String at Arrays.fill(row, arraytext);
这是因为你正在尝试在期望String [] []时添加一个String。 对于打印,您可以使用Arrays.deepToString()作为答案。
System.out.println(Arrays.deepToString(arrays));
示例:
public static void main(String[] args) {
String[][][] array3d = new String[10][10][10];
for(String [] [] array2d : array3d){
for(String[] array : array2d){
Arrays.fill(array, "hello");
}
}
System.out.println(Arrays.deepToString(array3d));
}
答案 1 :(得分:1)
问题在于:
for (String[][] row: arrays)
Arrays.fill(row, arraytext);
尝试将row
(一个 double 字符串数组)传递给期望单个字符串数组的函数。要获得3D数组的最低级别,您需要:
for (String[][] slice: arrays)
for (String[] row: slice)
Arrays.fill(row, arraytext);
您的双循环中的其他答案也解决了这两个问题:除非您将<=
更改为<
,并且sub
不是,否则您将获得超出范围的索引没定义。
答案 2 :(得分:0)
您的阵列超出范围,而不是<=
尝试<
。
for (int a = 0; a < x; a++){
for (int b = 0; b < x; sub++){
for (int j = 0; j < i; j++)
{System.out.println(arrays[a][b][j]);}
}
}
另外,sub
是什么?您的代码段应显示您定义此变量的位置。
答案 3 :(得分:0)
看起来您遇到了1次错误(使用<
代替<=
):
for (int a = 0; a<x; a++){
for (int b = 0; b<x; b++){
for (int j = 0; j<i; j++)
{System.out.println(arrays[a][b][j]);}
}
}
因为您将arrays
声明为
String[][][] arrays = new String[x][x][i];
对于前两个索引,边界从0到x-1
,对于thrid索引,边界从0到i-1
。
答案 4 :(得分:0)
此外,您在第二个循环中递增未知变量sub而不是b
答案 5 :(得分:0)
您只是忘了从copy-pastaing中替换临时值
for (int a = 0; a<=x; a++){
for (int b = 0; b<=x; sub++){ // sub here <---
for (int j = 0; j<=i; j++) {
System.out.println(arrays[a][b][j]);
}
}
}
另见@ jh314的回答,你做错了一次
答案 6 :(得分:-1)
package academy.learnprogramming;
import java.util.Arrays;
public class Print3DArray {
public static void main(String[] args) {
// declare & initialize an int 3D array firstInt3D
int[][][] firstInt3D = {
{{1,2}},
{{3,4}},
{{5,6,7,8},{9,10}},
{{11},{12,13,14}},
};
// print all values of firstInt3D page by page
int x = 0;
for (int[][] accessPage: firstInt3D){
System.out.println("page:" + x);
if (x < firstInt3D.length) x++;
for (int[] accessRow: accessPage){
System.out.println(Arrays.toString(accessRow));
}
System.out.println();
}
}
}