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

多维数组

二维数组

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

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值