JAVA基础-U6 数组、排序、查找-多维数组-二维数组

文章详细介绍了Java中的二维数组,包括如何动态和静态初始化,以及其在内存中的存在形式。还提供了使用二维数组打印特定图形(如000000001000020300000000)和杨辉三角的例子。此外,文章讨论了二维数组的声明和访问规则,并给出了相关编程练习。
摘要由CSDN通过智能技术生成
多维数组-二维数组
  • 快速入门

    请用二位数组输出如下图形:

    0 0 0 0 0 0

    0 0 1 0 0 0

    0 2 0 3 0 0

    0 0 0 0 0 0

public class TwoDimensionalArray01{

	public static void main(String[] args) {
		/*请用二位数组输出如下图形:
			0 0 0 0 0 0

			0 0 1 0 0 0 

			0 2 0 3 0 0

			0 0 0 0 0 0
		*/

		//二维就是两个[][],可以看做是特殊的一维数组,原来一维数组的每个元素都是一个一维数组
		int[][] arr = {	{0, 0, 0, 0, 0, 0},
						{0, 0, 1, 0, 0, 0},
						{0, 2, 0, 3, 0, 0},
						{0, 0, 0, 0, 0, 0}};

		//打印
		for (int i = 0; i < arr.length; i++) {//行,对应的就是二维数组的长度
			for (int j = 0; j < arr[i].length; j++) {//列,arr[i].length得到的就是每行的元素个数
				System.out.print(arr[i][j] + "\t");
			}
			System.out.println();
		}

		//如果我们要访问第(i+1)行的第(j+1)列的值:arr[i][j]
		//访问第二行第三列的元素
		System.out.println(arr[1][2]);
	}
}

二维数组的使用
  • 使用方式1:动态初始化

    1. 语法:类型[][] 数组名 = new 类型[大小][大小]

    2. 案例:

      int[][] arr = new int[2][3];//两行三列
      
    3. 二维数组在内存的存在形式

    在这里插入图片描述

  • 使用方式2:动态初始化

    1. 语法

      先声明:类型 数组名[][];

      再定义:数组名 = new 类型[大小][大小]

    2. 案例:

      int arr[][];//先声明
      arr = new int[2][3];//再开辟空间
      
  • 使用方式3:列数不确定

    1. 需求:

      i/jj = 0j = 2j = 3
      i = 01
      i = 122
      i = 2333
    2. 代码

      public class TwoDimensionalArray02{
      
      	public static void main(String[] args) {
      		/*
      		| i = 0 | 1    |      |      |
      		| i = 1 | 2    | 2    |      |
      		| i = 2 | 3    | 3    | 3    |
      		*/
      
      		int[][] arr = new int[3][];//创建二维数组,一共有三个一维数组,但是每个一维数组还没有开数据空间
      
      		//给一维数组的一维数组开辟空间并赋值
      		for (int i =0; i < arr.length; i++) {
      			//给每个一维数组(arr[i])开空间(new)。如果没有new,那么arr[i]就是null
      			arr[i] = new int[i + 1];//i+1是因为大小是从1开始
      
      			//给每个一维数组的一维数组赋值
      			for (int j = 0; j < arr[i].length; j++) {
      				arr[i][j] = i + 1;
      			}
      		}
      
      		//打印二维数组
      		for (int i = 0; i < arr.length; i++) {
      			for (int j = 0; j < arr[i].length; j++) {
      				System.out.print(arr[i][j] + " ");			
      			}
      			System.out.println();
      		}
      	}
      }
      
  • 使用方式4:静态初始化

    1. 语法

      类型 数组名[][] = {{值1, 值2..}, {值1, 值2..}, {值1, 值2..}};

    2. 案例

      int[][] arr = {{1, 1, 1}, {2, 2}, {3}};
      //定义了一个二维数组
      //arr有三个元素(每个元素都是一个一维数组)
      //第一个一维数组有3个元素,第二个有2个,第三个有1个
      
      

二维数组使用细节和注意事项
  1. 一维数组的声明方式有:

    int[] x 或者 int x[];
    
  2. 二维数组的声明当时有

    int[][] y 或者 int[] y[] 或者 int y[][]
    
  3. 二维数组实际上是由多个一维数组组成的,它的各个一维数组的长度可以相同,也可以不相同。


练习
  1. int arr[][] = {{4, 6}, {1, 4, 5, 7}, {-2}};遍历该数组,并得到和

  2. 使用二维数组打印一个10行的杨辉三角

    1
    1 1
    1 2 1
    1 3 3 1
    1 4 6 4 1
    1 5 10 10 5 1
    
    public class YangHui{
    
    	public static void main(String[] args) {
    
    		/*	1
    			1 1
    			1 2 1
    			1 3 3 1
    			1 4 6 4 1
    			1 5 10 10 5 1	
    		*/
    
    		/*
    		提示:
    		1. 第一行有1个元素,第n行有n个元素
    		2. 每一行的第一个和最后一个元素都是1
    		3. 从第三行开始,对于非第一个元素和最后一个元素的值:
    			arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
    		*/
    
    		int[][] YangHui = new int[10][];//动态之前先声明
    		for (int i = 0; i < YangHui.length; i++) {
    			//new新空间
    			YangHui[i] = new int[i + 1];
    			//赋值
    			for (int j = 0; j < YangHui[i].length; j++) {
    				//第一个和最后一个元素的值是1
    				if (j == 0 || j == YangHui[i].length - 1) {//下标是从0开始
    					YangHui[i][j] = 1;
    				}else{
    					YangHui[i][j] = YangHui[i - 1][j - 1] + YangHui[i - 1][j];
    				}
    			}
    		}
    
    		//打印
    		for (int i = 0; i < YangHui.length; i++) {
    			for (int j = 0; j < YangHui[i].length; j++) {
    				System.out.print(YangHui[i][j] + " ");
    			}
    			System.out.println();
    		}
    
    	}
    }
    
  3. 声明:int[] x, y[]; 以下选项允许通过编译的是();

    a. x[0] = y; 
    
    b. y[0] = x;
    
    c. y[0][0] = x;
    
    d. x[0][0] = y;
    
    e. y[0][0] = x[0];
    
    f. x = y;
    
    选be.x是一维数组,y是二维数组。x[]是int,y[]是一维数组。y[][]是int
    a. x[0] = y; 
    //int <- 二维数组
    b. y[0] = x;
    //一维数组 <- 一维数组
    c. y[0][0] = x;
    //int <- 一维数组
    d. x[0][0] = y;
    //x没有俩括号,直接错
    e. y[0][0] = x[0];
    //int <- int
    f. x = y;
    //一维数组 <- 二维数组
    
    选be.x是一维数组,y是二维数组。x[]是int,y[]是一维数组。y[][]是int
    a. x[0] = y; 
    //int <- 二维数组
    b. y[0] = x;
    //一维数组 <- 一维数组
    c. y[0][0] = x;
    //int <- 一维数组
    d. x[0][0] = y;
    //x没有俩括号,直接错
    e. y[0][0] = x[0];
    //int <- int
    f. x = y;
    //一维数组 <- 二维数组
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值