java二维数组

一、二维数组的定义

二维数组 是 存储 一维数组 的 数组
n维数组 : 数组元素是 n - 1 维数组

二、二维数组的声明与初始化

二维数组的声明

  1. java系统样式: (推荐使用)

int[][] arr;

​ 我们更建议使用以上这种方式声明数组。

  1. C的样式:

int arr[][];
int[] arr[];

二维数组的初始化

  1. 静态初始化

​ 方式一:int[][] arr = {{1, 2, 3}, {4, 5, 6}};

​ 方式二:int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}};

​ 方式一:声明和初始化不能分开

​ 方式二:声明和初始化可以分开

如:

int[][] arr;
arr = new int[][]{{1, 2, 3}, {4, 5, 6}};//正确
arr = {{1, 2, 3}, {4, 5, 6}};//报错
  1. 动态初始化

    方式一:生成一个等长的一维数组

int[][] arr = new int[5][6];
//[5]表示有五个一维数组
//[6]表示一个一维数组内有6个数据

​ 方式二:生成一个不等长的一维数组

double[][] arr = new double[3][];
//静态初始化第一个一维数组
arr[0] = new double[]{3.14, 6.28};
//动态初始化第二个一维数组
arr[1] = new double[5];

注意: 声明和初始化分开

//数组默认值为
byte 0
short 0    
int 0
long 0
float 0.0
double 0.0
boolean false
char 0或者"/u0000"(表现为空) 
引用数据类型 如:String 都是 null
    
//赋值
    arr[0][1] = 1;
    arr[2][2] = 3;

注意:

1. 数组内的数据类型必须保持一致

int[][] arr = {66, 88};//不兼容类型:int无法转换为int[]

2. 静态初始化和动态初始化不能结合定义!!

​ 如:

int[][] arr = new int[3][3]{{1, 2, 3}, {4, 5, 6}};//错误的,右边中括号内不能有数字

3. 什么时候使用静态初始化,什么时候使用初始化?

​ (1)当我们事前知道,需要存储哪些数据时候,选用静态初始化。

​ (2)当我们事前不知道,需要存储哪些数据时候,只能使用动态初始化。

4. 二维数组想要使用,必须指明其一维数组的个数

5. 二维数组通过下标访问

三、Array(数组名).length

Array(数组名).length 该属性可以获取二维数组的长度

二维数组的长度 指的是 数组内一维数组的个数

如:

int[][] arr = new int[][]{{1, 2, 3}, {4, 5, 6}};
System.out.print(arr.length);//2

四、二维数组的遍历

1. for循环遍历

含义:提取出二维数组内所有元素

​ 其中增强型的for循环一般形式:

for (数组元素数据类型 标识符 : 数组名){
	标识符 : 数组内的每一个元素
}
//数组的遍历
int[][] arr = {{1, 2, 3}, {4, 5, 6}};

for (int i = 0; i < arr.length; i++) {
    for (int j = 0; j < arr[i].length; j++) {
        System.out.print(arr[i][j] + "\t");
    }
    System.out.println();
}

//增强型的for循环
for (int[] e : arr) {
    for (int ele : e) {
        System.out.print(ele + "\t");
    }
    System.out.println();

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CEMFGlSn-1681656043330)(./…/…/…/AppData/Roaming/Typora/typora-user-images/image-20230416222202814.png)]

2. Arrays.toString(数组名)

int[][] arr = {{1, 2, 3}, {4, 5, 6}};

System.out.print(java.util.Arrays.toString(arr));
//输出:[[I@1b6d3586, [I@4554617c]

五、直接输出数组名

int[][] arr = {{1, 2, 3}, {4, 5, 6}};

System.out.println(arr);//[[I@74a14482
System.out.println(arr[0]);//[I@1b6d3586
System.out.println(arr[1]);//[I@4554617c

System.out.println(arr.hashCode());//1956725890

其中:

[[ 表示二维数组

I 表示 int 类型

@ 后面输出的 74a14482该数组hash码值195672589016进制

​ ——目前可以简单理解为 地址值

String[][] arr = {{"1", "2", "3"}, {"4", "5", "6"}};
System.out.println(arr);//[[Ljava.lang.String;@1b6d3586

其中:

L 表示非基本类型数据

引用数据类型传递的是地址值

int[][] arr = {{1, 2, 3}, {4, 5, 6}};//0x11
int[][] arr1 = arr;//0x11
主要内容: 1. 数组的定义 2. 数组的分类[按维数] 3. 数组的用法 4. 数组的常见操作 java中的foreach实现方式 一维数组 1. 定义:省略 2. 用法: 声明并赋值: //方法一:先声明,再赋值 int [] arr=new int[5]; arr[0]=10; arr[4]=100; arr[5]=10;//语法无误,编译时报错:java.lang.ArrayIndexOutOfBoundsException System.out.println(arr[5]);//语法无误,编译时报错:错误同上 //方法二:使用for循环动态赋值 //导入java.util.*;包 Scanner input=new Scanner(System.in); int [] arr=new int[5]; for(int i=0;i<arr.length;i++) { System.out.println("请输入第"+(i+1)+"个值"); arr[i]=input.nextInt(); } //方法三:声明时赋值 int [] arr=new int[]{23,45,56,67}; int [] arr1={23,45,56,67}; int [] arr2= new int[5]{23,45,56,67};//错误,此时不能给确定的长度 输出: int [] arr=new int[]{23,45,56,67}; //方法一:使用for循环输出 for(int i=0;i<arr.length;i++) { System.out.println(arr[i]); } //方法二:使用foreach输出:此为JDK5.0 新特性 for(int item : arr) { System.out.println(item); } 常见算法: 1. 求一维数组中的最大[小]值 2. 求一维数组中的总和,平均值 3. 添加,删除,修改,搜索等 具体请参考本人FTP\\5.0S1\\JAVA\\数组完整操作范例。[重复让人如此崩溃!] 二维数组 1. 定义:省略 2. 用法: 声明并赋值: //声明时赋值 int [][]arr={ {1,2,3}, {4,5,6}, {7,8,9} }; 输出: //方法一:使用嵌套for循环输出二维数组 for(int i=0;i<3;i++) { for(int j=0;j<3;j++) { System.out.print(arr[i][j]+" "); } System.out.println(); } //方法二:使用嵌套foreach输出二维数组 for(int row[] :arr) //此时不难看出,二维数组可以看作是每个元素都是一个一维数组的一维数组 { for(int item: row) { System.out.print(item+ " "); } System.out.println(); } 补充: //动态创建规则二维数组 int R=10;//行 int N=5;//列 int [][]arr=new int ­[N]; //动态创建不规则二维数组 int arr[][]; arr=new int[2][]; arr[0]=new int[10]; arr[1]=new int[5]; 赋值都一样:此处省略! 算法体验:杨辉三角 int i,j; int a[][]=new int[10][10]; //给每行的第一列,及对角线处均赋值为1 for(i=0;i<10;i++) { a[i][0]=1; a[i][i]=1; } //从arr[2][1]=a[1][0]+a[1][1]; //推出:a[i][j]=a[i-1][j-1]+a[i-1][j]; //即元素等于两肩之和 for(i=2;i<10;i++) { for(j=1;j<i;j++) { a[i][j]=a[i-1][j-1]+a[i-1][j]; } } for(i=0;i<10;i++) { for(j=0;j<=i;j++) { System.out.print(a[i][j]+" "); } System.out.println(); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值