Java学习笔记-Day08 Java二维数组

  • 一、二维数组的概念
  • 二、二维数组的声明
  • 三、二维数组的初始化
  • 1、动态初始化
  • 2、静态初始化
  • 3、一维和二维的长度
  • 3.1、一维和二维的长度都确定
  • 3.2、只有一维的长度确定
  • 4、二维数组的内存
  • 四、二维数组的遍历
  • 五、通过控制台输入给二维数组赋值
  • 六、 打印杨辉三角






一、二维数组的概念


二维数组是以 一维数组 为数组元素。

二、二维数组的声明


二维数组的声明形式

  • 语法1(常用): 数组元素类型[ ][ ] 变量名称;  例如:int[ ][ ] a; 或 String[ ][ ] s;
  • 语法2:数组元素类型 变量名称[ ][ ] ; 例如:int a[ ][ ]; 或 String s[ ][ ];
  • 语法3:数组元素类型[ ] 变量名称[ ] ; 例如:int[ ] a[ ]; 或 String[ ] s[ ];

其他多维数组的声明方式类似,区别就是多增加[];

三、二维数组的初始化

1、动态初始化

  • 语法1(常用):数据类型[ ][ ] 数组名 = new 数据类型[一维长度][二维长度];
  • 语法2:数据类型 数组名[ ][ ] = new 数据类型[一维长度][二维长度];
  • 语法3:数据类型[ ] 数组名[ ] = new 数据类型[一维长度][二维长度];
// 动态初始化语法1
		double[][] score1 = new double[3][5];
		// 动态初始化语法2		
		double[] score2[] = new double[3][5];
		// 动态初始化语法3
		double score3[][] = new double[3][5];

2、静态初始化

  • 语法:数据类型 [ ][ ] 数组名 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}…};
// 静态初始化语法
		int[][] arr={{22,15,32,20,18},{12,21,25,19,33},{14,58,34,24,66}};

静态初始化可用于不规则二维数组的初始化。

3、一维和二维的长度

3.1、一维和二维的长度都确定

如果同时确定一维和二维的长度,则表示数组的元素是等长的一维数组。

//数组a中存储2个一维数组,每个一维数组的长度都是3
		int[][] a=new int[2][3];
		//对a中的数组元素赋值
		a[0][0]=1;
		a[0][1]=2;
		a[0][2]=3;
		a[1][0]=11;
		a[1][1]=12;
		a[1][2]=13;

3.2、只有一维的长度确定

如果数组元素不是等长的一维数组,可以不指定二维长度。需要对二维数组中的一维数组进行初始化。

//二维数组b中存储2个一维数组,每个一维数组的长度不确定
		int[][] b=new int[2][];
		//对二维数组b中的一维数组进行初始化
		b[0]=new int[2];
		b[1]=new int[4];
		//对b中的数组元素赋值
		b[0][0]=10;
		b[0][1]=20;
		b[1][0]=100;
		b[1][1]=110;
		b[1][2]=120;
		b[1][3]=130;

4、二维数组的内存

Java 的 数组变量 是一种 引用类型 的变量,存储在栈内存中,但数组变量并不是数组本身。而 数组变量的值 指向存储在堆内存中的数组具体内容。

Java二维数组储存字符串 java string二维数组_二维数组



四、二维数组的遍历


将数组中的元素一个一个取出来使用,这个过程叫遍历。通过嵌套循环实现二维数组的遍历。第一个循环控制二维数组中的一维数组,第二个循环控制二维数组中的一维数组里的元素。

(1)for循环遍历:可以用于操作和输出数组的元素。

int[][] a={{22,15,32,20,18},{12,21,25,19,33},{14,58,34,24,66}};	
//使用for循环遍历
for(int i=0;i<a.length;i++){
    for(int j=0;j<a[i].length;j++){
    	System.out.println(a[i][j]);
	}	
}


(2)增强for循环遍历:只能用于输出数组的元素。

int[][] a={{22,15,32,20,18},{12,21,25,19,33},{14,58,34,24,66}};		
//使用增强for循环遍历
for(int[] n:a){
	for(int i:n){
	     System.out.println(i);
	}
}

五、通过控制台输入给二维数组赋值


通过控制台输入给二维数组赋值。

import java.util.Scanner;

public class Demo {
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		// 定义数组score
		double[][] score = new double[3][3];

		// for循环给数组 score 的元素赋值
		for (int i = 0; i < score.length; i++) {
			for (int j = 0; j < score[i].length; j++) {
				System.out.println("请输入数据:");
				// 接收数据
				score[i][j] = input.nextDouble();
			}
		}
		// 关闭输入的流
		input.close();
	}
}

六、 打印杨辉三角


1、 打印杨辉三角

Java二维数组储存字符串 java string二维数组_java_02

/**
 * 	打印杨辉三角
 * 	1
 * 	11
 * 	121
 * 	1331
 * 	14641
 * @author Administrator
 *
 */
public class YangHuiTriangle1 {
	public static void main(String[] args) {
		// 定义一个二维数组存储杨辉三角
		int[][] array = new int[5][5];
		
		for (int i = 0; i < array.length; i++) {
			for (int j = 0; j <= i; j++) {
				if(j == 0 || i == j) {
					// 给每行的第一个元素和最后一个元素赋值1
					array[i][j]=1;
				}else {
					// 给每行的在 第一个和最后一个 之间的元素赋值
					array[i][j]=array[i-1][j]+array[i-1][j-1];
				}
				
				System.out.print(array[i][j]);
			}
			
			System.out.println();
		}

	}
}


2、 打印等腰三角形的杨辉三角

Java二维数组储存字符串 java string二维数组_一维数组_03

/**
 * 	打印杨辉三角
 * 	    1
 * 	   1 1
 * 	  1 2 1
 * 	 1 3 3 1
 * 	1 4 6 4 1
 * @author Administrator
 *
 */
public class YangHuiTriangle2 {
	public static void main(String[] args) {
		// 定义一个二维数组存储杨辉三角
		int[][] array = new int[5][5];
		
		for (int i = 0; i < array.length; i++) {
			for (int a = array.length-i-1; a > 0; a--) {
				System.out.print(" ");
			}
			for (int j = 0; j <= i; j++) {
				if(j == 0 || i == j) {
					// 给每行的第一个元素和最后一个元素赋值1
					array[i][j]=1;
				}else {
					// 给每行的在 第一个和最后一个 之间的元素赋值
					array[i][j]=array[i-1][j]+array[i-1][j-1];
				}
				System.out.print(array[i][j]+" ");
			}
			
			System.out.println();
		}
	}
}