【Java→二维数组、杨辉三角】懒惰的小黑笔记07(小白一名,请大家多指点)

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

}

注:还有一种是用计算方法打印杨辉三角,此处不做测试,想了解可寻找其它博主的进行参考学习!

发布了9 篇原创文章 · 获赞 12 · 访问量 779

猜你喜欢

转载自blog.csdn.net/weixin_45625687/article/details/104687282