多维数组
二维数组
打印一下 Java 中的二维数组会发现,打印的是 JVM 中的地址:
import java.util.*;
public class Main {public static void main(String[] args) {int arr[][] = {{1, 2, 3},{4, 5, 6}};int ns[] = {3, 4, 1, 3};System.out.println(Arrays.toString(arr));System.out.println(Arrays.toString(ns)); }
}
输出结果:
[[I@5ccd43c2, [I@4aa8f0b4]
[3, 4, 1, 3]
打印一下二维数组的长度:
import java.util.*;
public class Main {public static void main(String[] args) {int arr[][] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};System.out.println(arr.length);}
}
其在内容中的结构如下:
打印出数组的每一行:
import java.util.*;
public class Main {public static void main(String[] args) {int arr[][] = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};int arr_0[] = arr[0];int arr_1[] = arr[1];int arr_2[] = arr[2];System.out.println(Arrays.toString(arr_0));System.out.println(Arrays.toString(arr_1));System.out.println(Arrays.toString(arr_2));}
}
Java 中二维数组中的每一个子数组长度不要求相同:
import java.util.*;
public class Main {public static void main(String[] args) {int arr[][] = {{1, 2, 3},{4, 5, 6, 8, 9},{7, 8, 9, 7}};int arr_0[] = arr[0];int arr_1[] = arr[1];int arr_2[] = arr[2];System.out.println(Arrays.toString(arr_0));System.out.println(Arrays.toString(arr_1));System.out.println(Arrays.toString(arr_2));}
}
打印二维数组
最麻烦的方法当然是用循环打印二维数组了,但是还有一种更加简单的方法(调用 JDK函数接口):
使用Arrays.deepToString()
方法
import java.util.*;
public class Main {public static void main(String[] args) {int arr[][] = { {1, 2, 3},{4, 5, 6, 8, 9},{7, 8, 9, 7}};System.out.println(Arrays.deepToString(arr));}
}
三维数组
一种很形象的描述是:“三维数组就是二维数组的数组”。
import java.util.*;
public class Main {public static void main(String[] args) {int[][][] ns = {{{1, 2, 3},{4, 5, 6},{7, 8, 9}},{{10, 11},{12, 13}},{{14, 15, 16},{17, 18}}};System.out.println(Arrays.deepToString(ns));}
}
可以看到,deepToString()
就是一种深度搜索的打印多维数组的方法,在三位数组的情况下也同样适用,并且它在内存中的结构如下图所示:
练习
使用二维数组可以表示一组学生的各科成绩,请计算所有学生的平均分:
int[][] scores = {{ 82, 90, 91 },{ 68, 72, 64 },{ 95, 91, 89 },{ 67, 52, 60 },{ 79, 81, 85 },};
import java.util.*;
public class Main {public static void main(String[] args) {int[][] scores = {{ 82, 90, 91 },{ 68, 72, 64 },{ 95, 91, 89 },{ 67, 52, 60 },{ 79, 81, 85 },};for (int[] stu : scores) {int stu_ave = 0;for (int score : stu) {stu_ave += score;} // 对每个学生求出成绩的总分stu_ave /= scores[0].length; // 除以长度得到其平均分System.out.println(stu_ave);}}
}