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 的 数组变量 是一种 引用类型 的变量,存储在栈内存中,但数组变量并不是数组本身。而 数组变量的值 指向存储在堆内存中的数组具体内容。
四、二维数组的遍历
将数组中的元素一个一个取出来使用,这个过程叫遍历。通过嵌套循环实现二维数组的遍历。第一个循环控制二维数组中的一维数组,第二个循环控制二维数组中的一维数组里的元素。
(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、 打印杨辉三角
/**
* 打印杨辉三角
* 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、 打印等腰三角形的杨辉三角
/**
* 打印杨辉三角
* 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();
}
}
}