java复习第六天二维数组原理

1.

/*

二维数组:就是一个数组元素是一维数组的数组
格式1:每一个一维数组的长度都一样
数据类型[][] 数组名 = new 数据类型[m][n];
m:表示这个二维数组有m个一维数组
n:表示每个一维数组有n个元素

int[][] arr = new int[3][2];
表示声明一个可以存放3个一维数组的二维数组,每个一维数组的长度是2

取值:数组名[m][n],表示获取第m+1个一维数组的第n+1个元素
赋值:数组名[m][n] = value,表示给数组的第m+1个一维数组的第n+1个元素赋值为value
*/
class ArrayDemo{
public static void main(String[] args){
int[][] arr = new int[3][2];
System.out.println(arr);//整个二维数组的首地址:[[I@15db9742
System.out.println(arr[0]);//第一个一维数组的首地址:[I@6d06d69c
System.out.println(arr[1]);//第二个一维数组的首地址:[I@7852e922
System.out.println(arr[2]);//第三个一维数组的首地址:[I@4e25154f
System.out.println(arr[0][0]);//0
System.out.println(arr[1][1]);//0
System.out.println(arr[2][1]);//0
arr[0][0] = 100;
arr[1][1] = 200;
System.out.println(arr[0][0]);//100
System.out.println(arr[1][1]);//200
}

}

2.

/*
格式2:可以动态指定每个一维数组的长度
数据类型[][] 数组名 = new 数据类型[m][];
m:这个二维数组有m个一维数组,但是每个一维数组的长度可以动态的指定
*/
class ArrayDemo2{
public static void main(String[] args){
//创建了一个二维数组,这个二维数组有3个一维数组
int[][] arr = new int[3][];
System.out.println(arr);//[[I@15db9742
System.out.println(arr[0]);//null
System.out.println(arr[1]);//null
System.out.println(arr[2]);//null
arr[0] = new int[1];
arr[1] = new int[2];
arr[2] = new int[3];
System.out.println(arr[0]);//[I@6d06d69c
System.out.println(arr[1]);//[I@7852e922
System.out.println(arr[2]);//[I@4e25154f
arr[0][0] = 10;
arr[1][1] = 20;
arr[2][2] = 30;
System.out.println(arr[0][0]);//10
System.out.println(arr[1][1]);//20
System.out.println(arr[2][2]);//30
}
}

3.

/*

二维数组格式3:可以直接给每个一维数组的元素赋值
数据类型[][] 数组名 = new 数据类型[][]{{值1,值2...},{值1,值2...},{值1,值2...}};
简化格式:
数据类型[][] 数组名 = {{值1,值2...},{值1,值2...},{值1,值2...}};
*/
class ArrayDemo3{
public static void main(String[] args){
//int[][] arr = {{1,2,3},{11,22,33,44},{111,222}};
int[][] arr = new int[][]{{1,2,3},{11,22,33,44},{111,222}};
System.out.println(arr);//[[I@15db9742
System.out.println(arr[0]);//[I@6d06d69c
System.out.println(arr[1]);//[I@7852e922
System.out.println(arr[2]);//[I@4e25154f
System.out.println(arr.length);//二维数组的长度:3
System.out.println(arr[0].length);//第一个一维数组的长度:3
System.out.println(arr[1].length);//第二个一维数组的长度:4
System.out.println(arr[2].length);//第三个一维数组的长度:2

System.out.println(arr[0][2]);//3
System.out.println(arr[1][2]);//33
System.out.println(arr[2][0]);//111
}

}

4.面试必考题之冒泡排序

class ArraySort{
public static void main(String[] args){
int[] arr = {-1,2,55,12,6,-5};
//排序之前的遍历:
showArray(arr);

bubbleSort(arr,false);

//排序之后的遍历:
showArray(arr);
}

//使用冒泡排序对数组进行排序,isDesc如果是true就表示降序,反之表示升序
public static void bubbleSort(int[] arr,boolean isDesc){
//总共遍历比较次数:数组长度-1
for(int i=1; i<arr.length; i++){
//每一次遍历比较的次数:数组长度-当前遍历比较的次数
for(int j=0; j<arr.length-i; j++){
//拿着j和j+1对应的值进行比较
if(isDesc){
//降序:如果发现前面的值比后面的值小的话,就把前面的值往后方法
if(arr[j]<arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}else{
//升序:如果发现前面的值比后面的值大的话,就把前面的值往后方法
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}

//遍历一维数组的方法
public static void showArray(int[] temp){
//遍历一维数组
for(int j=0; j<temp.length; j++){
if(temp.length==1){//判断数组长度是否等于1
System.out.println("["+temp[j]+"]");
}else if(j==0){//第一个元素
System.out.print("["+temp[j]+",");
}else if(j==temp.length-1){//最后一个元素
System.out.println(temp[j]+"]");
}else{//剩余的元素
System.out.print(temp[j]+",");
}
}
}

}

5.遍历二维数组

/*
二维数组:就是一个数组元素为一维数组的数组
*/
class ArrayTest{
public static void main(String[] args){
int[][] arr = {{666},{1,2,3},{11,22,33,44,55},{111,222,333}};
showArray(arr);
}

//遍历二维数组的方法
public static void showArray(int[][] arr){
/*
[1,2,3]
[11,22,33,44,55]
[111,222,333]
*/
//先遍历二维数组
for(int i=0; i<arr.length; i++){
//取出来的是一维数组
int[] temp = arr[i];
//遍历一维数组
showArray(temp);
}
}

//遍历一维数组的方法
public static void showArray(int[] temp){
//遍历一维数组
for(int j=0; j<temp.length; j++){
if(temp.length==1){//判断数组长度是否等于1
System.out.println("["+temp[j]+"]");
}else if(j==0){//第一个元素
System.out.print("["+temp[j]+",");
}else if(j==temp.length-1){//最后一个元素
System.out.println(temp[j]+"]");
}else{//剩余的元素
System.out.print(temp[j]+",");
}
}
}

}

冒泡原理图:


原理图:





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值