6.2 二维数组
声明: 此笔记通过观看【尚学堂】+《Java程序设计(赖小平主编)清华大学出版社》感悟整理得出, 若有抄袭,请注明来源联系作者!
多维数组可以看成以数组为元素的数组。在实际开发中,最多用到二维数组(学习容器后,使用容器,二维数组较少用)。二维数组的元素布局成平面状,对应二维坐标。
声明与分配内存格式:
元素类型[] [] 数组名 = new 元素类型[行的个数][列的个数]
初始化:
- 1、 动态初始化
格式:先声明后分配内存空间,如下:
import java.util.Arrays;
public class ArrayTest04 {
public static void main(String[] args) {
//动态初始化(先声明后分配空间再赋值)
int[][] test02 = new int[2][3];
//为最高维分配引用空间(在test02数组里索引为0的位置分配一个长度为2的新数组)
test02[0] = new int[2];
//为最高维分配引用空间(在test02数组里索引为1的位置分配一个长度为3的新数组)
test02[1] = new int[3];
//为数组的每一个索引位置赋值
test02[0][0] = 10;
test02[0][1] = 12;
test02[1][0] = 13;
test02[1][1] = 14;
test02[1][2] = 16;
//写法二
int[][] test = new int[2][];
test[0] = new int[] {12,15,16};
test[1] = new int[] {16,10,18,5};
System.out.println(Arrays.toString(test[0])); //输出:[12, 15, 16]
System.out.println(test[0][1]); //输出:15
内存分析:
- 2、 静态初始化
格式:数据类型 数组名[] [] = {{第0行初始化值},{第1行初始化值},…….{第n行初始化值}};
【实例 测试静态初始化二维数组】
//静态初始化(声明数组即时分配内存)
int[][] test03 = {
{12,5,1}
,{10,9}
,{20,3,14,15}
};
System.out.println(Arrays.toString(test03[1])); //输出:[10, 9]
System.out.println(test03[0][1]); //输出:5
【实例 创建一个二维数组,计算每行元素的平均值】
int[][] test03 = {
{12,5,1}
,{10,9}
,{20,3,14,15}
};
//计算每行元素的平均值
System.out.println("所有元素的值如下:");
//i控制行,数组名.length,实际上是数组的行数
for(int i = 0;i<test03.length;i++) {
double sum = 0;
//j控制列,取当前行列的个数,用数组名[列的个数].length
for(int j = 0;j<test03[i].length;j++) {
System.out.print(test03[i][j] +" ");
sum+=test03[i][j];
}
//System.out.println();
/*输出:
* 所有元素的值如下:
* 12 5 1
* 10 9
* 20 3 14 15
* */
System.out.println("\t本行平均值:" + sum/test03[i].length);
}
【执行结果】
说明:
数组名.length,实际是控制数组的行数。取当前行中列的个数,用数组名[列的个数].lenth。
注(个人分析):
6.2.1 二维数组的使用(杨辉三角)
【重点实例 测试杨辉三角】
思路:
1、 发现杨辉三角的首尾都为1,中间的数均为上一行的每两个数之和
2、 先测试前3行
3、 运用for的嵌套循环
4、 先打印出直角型的杨辉三角
测试1:
思维1: [输入行数] 通过遍历打印直角型的杨辉三角
import java.util.Scanner;
/**
*测试直角型的杨辉三角
* @author 卟淡
*
*/
public class ArrayPartice01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输出需要打印杨辉三角的行数:");
int n = sc.nextInt();
int[][] test = new int[n][n];
for(int i=0;i<n;i++) {
test[i][0] = 1;
test[i][i] = 1;
}
/*
* 例:从第三行开始,第三行的中间数等于上一行的两个数之和
*/
for(int j = 2;j<test.length;j++) {
for(int k = 1;k<j;k++) {
test[j][k] = test[j-1][k-1] + test[j-1][k];
}
}
//打印直角杨辉三角
for(int m = 0;m<test.length;m++) {
for(int x = 0;x<=m;x++) {
System.out.print(test[m][x] + "\t");
}
System.out.println();
}
}
}
测试2:
思维2: 简化打印杨辉三角
public class ArrayPartice {
public static void main(String[] args) {
/*
*发现第一位和最后一位都为1,第二行的数字两两相加得到第三行中间的数字
*然后 先尝试测试前3行
*再增加n行时该怎么做
*/
int[][] array = new int[10][10]; //打印一个10行10列的二维数组
for(int j = 0;j<array.length;j++) {
for(int k = 0;k<=j;k++) {
if(k==0||k==j) { //第一行第一个数为1,下面每行的首尾都是1
array[j][k] = 1;
}else {
array[j][k] = array[j-1][k-1] + array[j-1][k];
}
//System.out.print(array[j][k]+"\t"); //也可以不需要再定义循环直接打印“直角型的杨辉三角“
}
//System.out.println();
}
注:需要增加Scanner类(手动输入值)可自行增加。
测试3:
打印三角形的杨辉三角
public class ArrayPartice {
public static void main(String[] args) {
int[][] array = new int[10][10]; //打印一个10行10列的二维数组
for(int j = 0;j<array.length;j++) {
for(int k = 0;k<=j;k++) {
if(k==0||k==j) { //第一行第一个数为1,下面每行的首尾都是1
array[j][k] = 1;
}else {
array[j][k] = array[j-1][k-1] + array[j-1][k];
}
}
}
for(int m = 0;m<array.length;m++) {
/*
* 增加下面这个for循环是为了打印“三角形的杨辉三角”,
* 若无这个for循环则打印的是“直角型的杨辉三角”
* 解析:
*从第0行开始,打印9个 空格,第二行打印8个,第三行打印7个,以此类推!
*/
for(int x =m;x<array.length;x++) {
System.out.print(" ");
}
for(int n = 0;n<=m;n++) {
System.out.print(array[m][n]+" ");
}
System.out.println();
}
}
}
注:还有一种是用计算方法打印杨辉三角,此处不做测试,想了解可寻找其它博主的进行参考学习!