《从C/C++到Java入门指南》- 16.多维数组

发布于:2024-07-22 ⋅ 阅读:(134) ⋅ 点赞:(0)

多维数组

二维数组

打印一下 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);
    }
}

其在内容中的结构如下:

image-20240719104535222

打印出数组的每一行:

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()就是一种深度搜索的打印多维数组的方法,在三位数组的情况下也同样适用,并且它在内存中的结构如下图所示:

image-20240719105357795

练习

使用二维数组可以表示一组学生的各科成绩,请计算所有学生的平均分:

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);
    	}
    }
}


网站公告

今日签到

点亮在社区的每一天
去签到