Javase基础5:数组、数组查找、排序、二维数组

目录

1.笔记

1.1 数组

2. 练习

2.1 二维数组练习题

2.2 二维数组的内存图分析(重要)


1.笔记

1.1 数组

1. 数组
   容器:存储东西(数据)的
   数组概念:数组就是用于存储数据的长度固定的容器,保证多个数据的数据类型要一致
      ① 创建数组的时候,必须指定长度
      ② 数组在创建的时候,需要指定数据类型
      ③ 数组是有顺序的(位置的顺序)
   数组的特点:
      数组的长度一旦确定,就不允许修改

2. 数组的使用
   2.1 数组的定义
      ① 动态初始化 ★
         语法:
            a. 数组的声明
               数据类型[] 数组名; //推荐
               数据类型 数组名[];
            b. 数组空间的开辟
               数组名=new 数据类型[数组长度];

            二合一:数据类型[] 数组名=new 数据类型[数组长度];
      ② 静态初始化(在创建数组的同时,将数据指定完成)
         a.
            数据类型[] 数组名;
            数组名=new 数据类型[]{数据1,数据2,数据3...};
            合二为一:
               数据类型[] 数组名=new 数据类型[]{数据1,数据2,数据3...};
            注意事项:
               数据的个数就是数组的长度,并且不允许显示的指定长度
         b.
            数据类型[] 数组名={数据1,数据2,数据3...};
            注意事项:
               不允许拆开
      ③ 动态和静态的使用场合
         在创建数组的时候,不知道数据是什么,就是用动态初始化!
         在创建数组的时候,已知数据是什么,就可以采用静态初始化!

   2.2 数组值的操作
      ① 存值
         数组名[角标]=值;
            注意:
               a. 值要匹配数组的数据类型
               b. 角标不能超过数组的角标范围
      ② 取值
         数组名[角标]

   2.3 数组的特性
      a. 数组是存在默认值的
         整型数组:0
         浮点型数组:0.0
         String数组:null
         boolean数组:false
         char数组:空白符

   2.4 异常总结(已经接触到的,全面的后面会总结)
      ① 数组角标越界:(使用了数组范围之外的角标,就会出现此异常)
            ArrayIndexOutOfBoundsException
         出现异常,程序会终止,仔细的查看异常信息,异常类型、异常位置

         案例:Exception in thread "main"         java.lang.ArrayIndexOutOfBoundsException: 5
         at Demo1.main(Demo1.java:12)
            异常类型:ArrayIndexOutOfBoundsException
            异常位置:Demo1.java:12
      ② 空指针 :(有null值打点)
         NullPointerException
         保证每个点前面的变量的值不能是null值!

         案例:Exception in thread "main" java.lang.NullPointerException
            at Demo1.main(Demo1.java:9)
            异常类型:NullPointerException
            异常位置:Demo1.java:9
 

3. 数组的遍历
      遍历(将数组中所有数据进行展示)
      如何获得数组的长度   int length=数组名.length;
   数组本身是引用数据类型,所有可以赋值为null
      举例:int[] arrs=new int[5];
         arrs中存储的数据是int型,是基本数据类型
         arrs本身是引用数据类型(引用数据类型都可以赋值为null)

4. 数组的内存
   程序运行时需要内存(计算机的运行内存)
   jvm(java虚拟机,在运行java程序时,会去电脑的运行内存分配空间)
      ① 虚拟机栈:
      ② 堆内存:
      ③ 方法区:
   这一部分要多画内存图理解
5. 数组的反转
   int[] arrs={3,5,7,8,9};
   编写程序,让arrs中的数据进行反转{9,8,7,5,3}

6. 数组的查找
   ① 顺序查找(早上找x的日测题)
      从头到尾一个一个的找!
   ② 二分查找
      对数组有一个要求:数组必须是有序(大小)的!
      int num=3;
      int[] arrs={3,5,7,8,9};//从小-大的顺序

7.数组的排序
   int[] arrs={3,15,7,28,9};
   编写程序,让arrs是有序的!(小-大、大-小)
   ① 冒泡排序(5个数据)
      冒第一个泡,写一个循环,让数组中的最大值出现在数组的最后一个位置
      冒第二个泡,写一个循环,让数组中的第二大值出现在数组的最倒数第二个位置
      ...
      两两对比,大值放在后面!5个数数据,冒最大的泡,需要对比多少次?4次
      {3,15,7,28,9}
      {3,7,15,28,9}
      {3,7,15,28,9}
      {3,7,15,9,28}
   ② 简单选择排序
      找到数组中的最大值,放在最后一个位置
      找到数组中第二大的值,放在倒数第二个位置
      {3,15,7,28,9}
      int max=28;
      int index=3;
      将index和最后一个位置进行交换
      {3,15,7,9,28}
      int max=15;
      int index=1;
      将index和倒数第二个位置进行交换
      {3,9,7,15,28}
8. 二维数组
    数组:本身也是一个数据类型(引用数据类型)
    数组中是可以存储数组的,称之为二维数组
    8.1 使用
        a. 定义
            数据类型[][] 数组名;
            数据类型 数组名[][];
        b. 初始化
           ① 动态初始化
                (1) 数组名=new 数据类型[n][m];
                    二维数组的空间以及小数组的空间都会开辟,
                    二维数组的空间存储的是小数组的地址,
                    小数组中存储的是数据类型的默认值
                (2)数组名=new 数据类型[n][];
                    只开辟二维数组的空间,长度为n
                    小数组的空间是不开辟的,
                    二维数组中默认值是null(数组是引用数据类型,默认值就是null)
           ② 静态初始化
              数据类型[][] 数组名=new 数据类型[][]{{n个数据},{n个数据},{n个数据}...};
                数据类型[][] 数组名={{n个数据},{n个数据},{n个数据}...}; 

2. 练习

2.1 二维数组练习题

练习一:

请使用二维数组存储如下数据,并遍历显示

1

2 2

3 3 3

4 4 4 4

5 5 5 5 5

public static void main(String[] args){
		//1、声明一个二维数组,并且确定行数
		//因为每一行的列数不同,这里无法直接确定列数
		int[][]  arr = new int[5][];
		
		//2、确定每一行的列数
		for(int i=0; i<arr.length; i++){
			/*
			arr[0] 的列数是1
			arr[1] 的列数是2
			arr[2] 的列数是3
			arr[3] 的列数是4
			arr[4] 的列数是5
			*/
			arr[i] = new int[i+1];
		}
		
		//3、确定元素的值
		for(int i=0; i<arr.length; i++){
			for(int j=0; j<arr[i].length; j++){
				arr[i][j] = i+1;
			}
		}
		
		//4、遍历显示
		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();
		}
		
	}
public static void main(String[] args){
		//1、声明一个二维数组,并且初始化
        int[][] arr = {
            {1},
            {2,2},
            {3,3,3},
            {4,4,4,4},
            {5,5,5,5,5}
        };
		
		
		//2、遍历显示
		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();
		}
		
	}
public static void main(String[] args){
		//1、声明一个二维数组,并且确定行数
		//因为每一行的列数不同,这里无法直接确定列数
		int[][]  arr = new int[5][];
		
		
		for(int i=0; i<arr.length; i++){
			//2、确定每一行的列数
			arr[i] = new int[i+1];
			
			//3、确定元素的值
			for(int j=0; j<arr[i].length; j++){
				arr[i][j] = i+1;
				
				System.out.print(arr[i][j] + " ");
			}

			System.out.println();
		}

	}

练习二:

请使用二维数组存储如下数据,并遍历显示

1 1 1 1 1

2 2 2 2 2

3 3 3 3 3

4 4 4 4 4

public static void main(String[] args){
		int[][] arr = {
			{1,1,1,1,1},
			{2,2,2,2,2},
			{3,3,3,3,3},
			{4,4,4,4,4}
		};
		
		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();
		}
	}
	public static void main(String[] args) {
		//1、声明二维数组,并确定行数和列数
		int[][] arr = new int[4][5];
		
		//2、确定元素的值
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr.length; j++) {
				arr[i][j] = i + 1;
			}
		}
		
		//3、遍历显示
		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();
		}
	}

练习三:

请使用二维数组存储如下数据,并遍历显示

        String[][] employees = {
                {"10", "1", "段誉", "22", "3000"},
                {"13", "2", "令狐冲", "32", "18000", "15000", "2000"},
                {"11", "3", "任我行", "23", "7000"},
                {"11", "4", "张三丰", "24", "7300"},
                {"12", "5", "周芷若", "28", "10000", "5000"},
                {"11", "6", "赵敏", "22", "6800"},
                {"12", "7", "张无忌", "29", "10800","5200"},
                {"13", "8", "韦小宝", "30", "19800", "15000", "2500"},
                {"12", "9", "杨过", "26", "9800", "5500"},
                {"11", "10", "小龙女", "21", "6600"},
                {"11", "11", "郭靖", "25", "7100"},
                {"12", "12", "黄蓉", "27", "9600", "4800"}
            };

其中"10"代表普通职员,"11"代表程序员,"12"代表设计师,"13"代表架构师

public static void main(String[] args) {
		String[][] employees = {
		        {"10", "1", "段誉", "22", "3000"},
		        {"13", "2", "令狐冲", "32", "18000", "15000", "2000"},
		        {"11", "3", "任我行", "23", "7000"},
		        {"11", "4", "张三丰", "24", "7300"},
		        {"12", "5", "周芷若", "28", "10000", "5000"},
		        {"11", "6", "赵敏", "22", "6800"},
		        {"12", "7", "张无忌", "29", "10800","5200"},
		        {"13", "8", "韦小宝", "30", "19800", "15000", "2500"},
		        {"12", "9", "杨过", "26", "9800", "5500"},
		        {"11", "10", "小龙女", "21", "6600"},
		        {"11", "11", "郭靖", "25", "7100"},
		        {"12", "12", "黄蓉", "27", "9600", "4800"}
		    };
		System.out.println("员工类型\t编号\t姓名\t年龄\t薪资\t奖金\t股票\t");
		for (int i = 0; i < employees.length; i++) {
			switch(employees[i][0]){
			case "10":
				System.out.print("普通职员");
				break;
			case "11":
				System.out.print("程序员");
				break;
			case "12":
				System.out.print("设计师");
				break;
			case "13":
				System.out.print("架构师");
				break;
			}
			for (int j = 1; j < employees[i].length; j++) {
				System.out.print("\t" + employees[i][j]);
			}
			System.out.println();
		}
	}

2.2 二维数组的内存图分析(重要)

示例一:分析下列代码内存图

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

 示例二:分析下列代码内存图

	//1、声明二维数组,并确定行数和列数
		int[][] arr = new int[4][5];
		
		//2、确定元素的值
		for (int i = 0; i < arr.length; i++) {
			for (int j = 0; j < arr.length; j++) {
				arr[i][j] = i + 1;
			}
		}

示例三: 分析下列代码内存图

		//1、声明一个二维数组,并且确定行数
		//因为每一行的列数不同,这里无法直接确定列数
		int[][]  arr = new int[5][];
		
		//2、确定每一行的列数
		for(int i=0; i<arr.length; i++){
			/*
			arr[0] 的列数是1
			arr[1] 的列数是2
			arr[2] 的列数是3
			arr[3] 的列数是4
			arr[4] 的列数是5
			*/
			arr[i] = new int[i+1];
		}
		
		//3、确定元素的值
		for(int i=0; i<arr.length; i++){
			for(int j=0; j<arr[i].length; j++){
				arr[i][j] = i+1;
			}
		}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯丰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值