二维数组
程序员文章站
2022-05-20 10:59:37
...
二维数组
二维数组:数组的数组,二维数组的每一个元素是一个一维数组
int[][] arr = new int[2][5];
定义了一个整型的二维数组,其中包含2个一维数组,每个一维数组可以存储5个整数
arr[1] --- 下标为1的位置上的一维数组
arr[1][3]---获取二维数组的具体元素
/*
* 二维数组:就是元素为一维数组的一个数组
*
* 格式一:
* 数据类型[][]数组名 = new 数据类型[m][n];
* m:表示这个二维数组有多少个一维数组
* n:表示每一个一维数组的元素有多少个
*
* 注意:
* A:以下格式也可以表示二维数组
* a:数据类型 数组名[][] = new 数据类型[m][n];
* b:数据类型[] 数组名[] = new 数据类型[m][n];
* B:注意以下定义的区别:
* int x,y; //int变量x,y
* int[] x,y[]; //x一维数组,y二维数组
*
*/
public class Array2Demo {
public static void main(String[] args) {
// 定义一个二维数组
int[][] arr = new int[3][2];
//定义了一个二维数组arr,它有3个一维数组的元素
//每一个一维数组有2个元素
//输出二维数组名称
System.out.println(arr); //地址值 [[aaa@qq.com
//输出二维数组的第一个元素一维数组的名称
System.out.println(arr[0]);//地址值
System.out.println(arr[1]);//地址值
//输出二维数组的元素
System.out.println(arr[0][0]);//0
System.out.println(arr[0][1]);//0
}
}
/*
* 格式二:
* 格式:
* 数据类型[][] 数组名 = new 数组类型[m][];
* m:表示这个二维数组有多少个一维数组,
* 列数没有给出,可以动态的给,这一次是一个变化的列数
*/
public class Array2Demo2 {
public static void main(String[] args) {
// 定义数组
int[][] arr = new int[3][];
System.out.println(arr);//[[aaa@qq.com
System.out.println(arr[0]);//null
System.out.println(arr[1]);//null
System.out.println(arr[2]);//null
//动态的为每一个一维数组分配空间
arr[0] = new int[2];
arr[1] = new int[3];
arr[2] = new int[1];
System.out.println(arr[0]);//[aaa@qq.com
System.out.println(arr[1]);//aaa@qq.com
System.out.println(arr[2]);//[aaa@qq.com
System.out.println(arr[0][0]);//0
System.out.println(arr[0][1]);//0
//ArrayIndexOutOfBoundsException: 2
//System.out.println(arr[0][2]);//错误:越界
arr[1][2] = 100;
System.out.println(arr[1][2]);//100
}
}
二维数组类型的构成:数据类型[][] ,具体数组的构成:new int[一维数组的个数][一维数组中元素的个数]
二维数组的长度:数组名.length
每个一维数组:数组名[下标].length
二维数组的遍历---两重for循环
public class Demo1 {
public static void main(String[] args) {
//二维数组:
int a = 4;
int[] arr = new int[2];//一维数组
//二维数组类型的构成:数据类型+[]+[] ,具体数组的构成:new int[一维数组的个数][一维数组中元素的个数]
int[][] arr1 = new int[2][];//二维数组
//赋值
int[][] arr2 = {{2,3},{5,6,7}};
//取值
for(int i=0;i<arr3.length;i++){//遍历的是二维数组
//遍历一维数组
for(int j=0;j<arr3[i].length;j++){
System.out.print(arr3[i][j]+" ");
}
System.out.println();
}
}
}
/*
* 需求:打印杨辉三角形(行数可以键盘录入)
* 1
* 1 1
* 1 2 1
* 1 3 3 1
* 1 4 6 4 1
* 1 5 10 10 5 1
*
* 分析:看这种图形的规律
* a:任何一行的第一列和最后一列都是1
* b:从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和
*
* 步骤:
* A:首先定义一个二维数组,行数如果是n,我们把列数也定义为n;
* 这个n的数据来自键盘录入
* B:给这个二维数组任何一行的第一列和最后一列赋值为1
* C:按照规律给其他元素赋值
* 从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和
* D:遍历这个二维数组
*/
import java.util.Scanner;
public class Array2Test2 {
public static void main(String[] args) {
// 键盘录入
Scanner sc = new Scanner(System.in);
System.out.println("n:");
int n = sc.nextInt();
//定义一个二维数组
int[][] arr =new int[n][n];
//给这个二维数组任何一行的第一列和最后一列赋值为1
for(int x = 0;x<arr.length;x++) {
arr[x][0] = 1;//任何一行第1列
arr[x][x] = 1;//任何一行的最后1列
}
//从第三行开始,每一个数据是它上一行的前一列和它上一行的本列之和
for(int x=2;x<arr.length;x++) {
//所以这里要减去1
//并且y也应该从1开始,因为第一列也有值了
for(int y = 1;y<=x;y++) {
//每一个数据都是它上一行的前一列和它上一行的本列之和
arr[x][y] = arr[x-1][y-1]+arr[x-1][y];
}
}
//这个时候,内循环的变化必须和九九乘法表类似
for(int x = 0;x<arr.length;x++) {
for(int y = 0;y<=x;y++) {
System.out.print(arr[x][y]+"\t");
}
System.out.println();
}
}
}