3_2、Java基本语法之一维数组与二维数组的使用

导语:数组是Java基础语法中重要的组成部分。

        数组的基础知识主要从以下几个方面进行讲解。

                1、数组的声明和初始化
                2、如何调用数组指定位置的元素
                3、如何获取数组的长度
                4、如何遍历数组
                5、数组元素的默认初始化值
                6、数组的内存解析

        

一、一维数组的使用

        1、一维数组的声明和初始化

                1.1静态初始化:数组初始化和数组元素的赋值操作同时进行

		int[] ids;
		ids = new int[]{1001,1002,1003,1004};

                1.2、动态初始化:数组初始化和数组元素的赋值操作分开进行

        int[] arr = new int[3];
        String[] names = new String[5];

                错误示范:编译错误

		//错误示范
		//int[] arr1 = new int[];
		//int[] arr2 = new int[3]{1001,1002,1003};
		//int[5] arr3 = new int[5];

        2、如何调用数组指定位置的元素:

                说明:①通过角标(索引)来调用指定位置的数组元素

                           ②数组元素的角标是从0开始的,到数组长度-1为止。

		names[0] = "王力宏";
		names[1] = "雷军";
		names[2] = "余承东";
		names[3] = "罗永浩";
		names[4] = "迪丽热巴";
//		names[5] = "古力娜扎";   java.lang.ArrayIndexOutOfBoundsException: 5
		System.out.println(names[3].charAt(0));

        3、如何获取数组的长度

                说明:①调用数组的length属性。

                           ②数组初始化完成后,其长度就被确定,无法改变。

		System.out.println(names.length);
		System.out.println(ids.length);

 

        4、如何遍历数组

                说明:使用循环结构。

/*		System.out.println(names[0]);
		System.out.println(names[1]);
		System.out.println(names[2]);
		System.out.println(names[3]);
		System.out.println(names[4]);
*/
		for(int i=0;i<names.length;i++){
			System.out.println(names[i]);
		}

 

        5、数组元素的默认初始化值

                1、基本数据类型:

                        >数组元素是整型:0
                        >数组元素是浮点型:0.0
                        >数组元素是字符型:0或者写成'\u0000'
                         >数组元素是布尔型:false

                2、引用数据类型:

                        >数组元素是引用数据类型:null

		int arr1[] = new int[3];
		for(int i=0;i<arr1.length;i++){
			System.out.println(arr1[i]);
		}
		System.out.println("********");
		
		double arr2[] = new double[3];
		for(int i=0;i<arr1.length;i++){
			System.out.println(arr2[i]);
		}
		System.out.println("********");
		
		char arr3[] = new char[3];
		for(int i=0;i<arr1.length;i++){
			System.out.println("----"+arr3[i]+"****");
		}
		
		if(arr3[0] == 0){
			System.out.println("hello");
		}
		System.out.println("********");
		
		boolean arr4[] = new boolean[3];
		for(int i=0;i<arr1.length;i++){
			System.out.println(arr4[i]);
		}
		System.out.println("********");
		
		String arr5[] = new String[3];
		for(int i=0;i<arr1.length;i++){
			System.out.println(arr5[i]);
		}
		if(arr5[0] == null){
			System.out.println("你好");
		}
		System.out.println("********");

 

        6、数组的内存解析

                1、内存的建议结构(尚硅谷康师傅作图):

         2、一维数组的内存解析:

 

        7、经典例题

                1、从键盘读入学生成绩,找出最高分, 并输出学生成绩等级。

                        成绩>=最高分-10 等级为’A’

                        成绩>=最高分-20 等级为’B’

                        成绩>=最高分-30 等级为’C’

                        其余 等级为’D’

		Scanner scan = new Scanner(System.in);
		
		System.out.print("请输入学生人数:");
		int count = scan.nextInt();
		int[] arr = new int[count];
		
		int max = 0;
		char grade = ' ';
		System.out.println("请输入" + count + "个成绩");
		for(int i=0;i<arr.length;i++){
			int score = scan.nextInt();
			arr[i] = score;
			if(arr[i]>max){
				max = arr[i];
			}
		}
		System.out.println("最高分是:" + max);
		for(int i = 0;i<arr.length;i++){
			switch((max-arr[i])/10){//也可以使用if-else结构,要注意根据范围确定哪个语句在上
				case 0:
				grade = 'A';
				break;
				case 1:
				grade = 'B';
				break;
				case 2:
				grade = 'C';
				break;
				default :
				grade = 'D';
				break;
			}
			System.out.println("student " + i +"score is"+arr[i] + "grade is "+ grade);
		}

运行结果:

 

二、二维数组的使用


                如何理解二维数组?

                对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组

        1、二维数组的声明和初始化

                1.1、二维数组的静态初始化

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

                1.2、二维数组的动态初始化

		String[][] arr2 = new String[3][2];
		String[][] arr3 = new String[3][];

        //也是正确的写法
        int[] arr4[] = new int[][]{{1,2,3},{4,5,7,8,9},{6}};
		int[] arr5[] = {{1,2,3},{4,5},{6}};


        2、如何调用数组指定位置的元素

                      说明:根据元素所在数组的角标进行调用。

		System.out.println(arr1[1][1]);//5
		System.out.println(arr2[2][1]);//null

        arr3[0] = new String[2];
		arr3[1] = new String[]{"张强","王伟","鱼尾"};
		System.out.println(arr3[0][1]);//null
		System.out.println(arr3[1][0]);//张强


        3、如何获取数组的长度

                调用数组的length属性。

		System.out.println(arr4.length);//3
		System.out.println(arr4[0].length);//3
		System.out.println(arr4[1].length);//5


        4、如何遍历数组

                使用嵌套循环结构遍历二维数组,依次类推如果要遍历三维数组,就使用三层嵌套循环,遍历n维数组就使用n层嵌套循环。

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


        5、数组元素的默认初始化值

                1、为了我们更好的理解二维数组的初始化默认值,我们规定:

                        1、二维数组分为外层数组的元素和内层数组的元素
                        2、二维数组 int[][] arr = new int[3][2]
                        3、外层数组:arr[0],arr[1],arr[2]
                        4、内层数组:arr[0][0],arr[0][1],arr[1][0],arr[1][1],arr[2][0],arr[2][1]

                对于初始化方式一:int[][] arr = new int[3][2];

                        外层数组的默认初始化值:地址值。

                        内层数组的默认初始化值:与一维数组相同。

                对于初始化方式二:int[][] arr = new int[3][];

                        外层数组默认初始化值:null。

                        内层数组默认初始化值:不存在,不可调用,调用编译器会报错。

		int[][] arr = new int[4][3];
		
		System.out.println(arr[0]);//[I@15db9742    地址值
		System.out.println(arr[0][0]);//0
		
		System.out.println(arr);//[[I@6d06d69c    地址值
		System.out.println("********");
		
		float[][] arr1 = new float[4][2];
		System.out.println(arr1[1]);//[F@7852e922    地址值
		System.out.println(arr1[2][1]);//0.0
		System.out.println("********");
		
		String[][] arr2 = new String[4][3];
		System.out.println(arr2[2]);//[Ljava.lang.String;@4e25154f    地址值
		System.out.println(arr2[1][1]);//null
		System.out.println("********");
		
		double[][] arr3 = new double[4][];
		System.out.println(arr3[2]);//null
//		System.out.println(arr3[3][0]);//报错
		System.out.println("********");


        6、数组的内存解析

 

        7、经典例题

                1、打印一个10行的杨辉三角。

		//1.声明初始化一个二维数组
		int[][] yangHui = new int[10][];
		
		//2.给二维数组赋值
		for(int i=0;i<yangHui.length;i++){
			yangHui[i] = new int[i+1];
			//2.1给首末元素赋值
			yangHui[i][0] = yangHui[i][i] = 1;
			//2.2给非首末元素赋值
			//if(i>1){
				for(int j=1;j<yangHui[i].length-1;j++){
					yangHui[i][j] = yangHui[i-1][j-1] + yangHui[i-1][j]; 
				}
		//	}
			
		}
		//3.遍历二维数组
		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();
		}

运行结果:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值