• 7.javase_数组1


    一. 数组定义格式

    格式1:数据类型[] 变量名;
    范例:int[] arr;
    格式2:数据类型 变量名[];
    范例:	int arr[];
    
    • 1
    • 2
    • 3
    • 4

    二. 数组初始化方式

    	1.1静态初始化:【初始化时指定每个数组元素的初始值,由系统决定数组长度】
    	    格式:数据类型[] 变量名 = new 数据类型[]{数据1,数据2,数据3,…};
    	    范例:int[] arr = new int[]{1,2,3};   int[] arr = {1,2,3};
    	1.2动态初始化:【初始化时只指定数组长度,由系统为数组分配初始值】
    		格式:数据类型[] 变量名 = new 数据类型[数组长度];
    		范例:int[] arr = new int[3];
    		代码案例:
    		    //格式:数据类型[] 变量名 = new 数据类型[数组长度];
    			int[] arr = new int[3];
    			//修改数组中的元素
    			arr[0] = 10;
    			arr[1] = 20;
    			arr[2] = 30;
    	1.3使用场景:
    		静态初始化:开始就存入元素值,适合一开始就能确定元素值的业务场景
    		动态初始化:指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景
    	1.4注意:
    		两种初始化的方式是独立的,不可以混用
    		如错误使用:int[] arr = new int[3]{30,40,50};
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    三.数组元素访问

    (1)数组变量访问方式
       格式:数组名
       
    (2)数组内部保存的数据的访问方式
       格式:数组名[索引]
     
    (3)数组元素访问代码案例
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
     public class ArrayDemo {
    			public static void main(String[] args) {
    				//1.定义一个数组,并进行初始化
    				int[] scores = new int[]{93,96,99}; //int[] scores = {93,96,99};
    				//2.输出数组名
    				System.out.println(scores); //[I@776ec8df
    				//3.输出数组中的元素
    				System.out.println(scores[0]);
    				System.out.println(scores[1]);
    				System.out.println(scores[2]);
    				System.out.println("-----------");
    				//4.修改数组中的元素
    				scores[0] = 100;
    				scores[1] = 98;
    				scores[2] = 95;
    				//5.再次输出数组中的元素
    				System.out.println(scores[0]);
    				System.out.println(scores[1]);
    				System.out.println(scores[2]);
    			}
    		 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    四.数组常见操作
    (1)数组遍历

    public class ArrayTest01 {
    			public static void main(String[] args) {
    				//1.定义数组并初始化
    				int[] arr = {77, 88, 99, 66, 55, 44};
    				//2.获取数组中的元素
    		        System.out.println(arr[0]);
    		        System.out.println(arr[1]);
    		        System.out.println(arr[2]);
    		        System.out.println(arr[3]);
    		        System.out.println(arr[4]);
    				//3.用循环改进
    		        for (int i=0; i<5; i++) {
    		            System.out.println(arr[i]);
    		        }
    				//4.格式:数组名.length
    		        System.out.println(arr.length);
    				for (int i=0; i<arr.length; i++) {
    					System.out.println(arr[i]);
    				}
    			}
    		}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    (2)获取数组最大值

    public class ArrayTest02 {
    		public static void main(String[] args) {
    			//1.定义数组
    			int[] arr = {12, 45, 98, 73, 60};
    			//2.定义变量max存储最大值,取第一个数据为变量的初始值
    			int max = arr[0];
    			//3.与数组中剩余数据逐个比对,每次比对将最大值保存到变量max中
    			for (int i=1; i<arr.length; i++) {
    				if(arr[i] > max) {
    					max = arr[i];
    				}
    			}
    			//4.循环结束后输出变量max的值
    			System.out.println("max:" + max);
    		}
    	  }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    (3)数组元素打乱
    1.1涉及到的操作
    获取数组中元素的随机索引
    Random r = new Random();
    int index = r.nextInt(arr.length);
    数组中元素交换
    int a = 10;
    int b = 20;
    int temp = a;
    a = b;
    b = temp;
    1.2数组元素打乱代码实现

    public class ArrayTest03 {
    			public static void main(String[] args) {
    				//1.定义数组
    				int[] arr = {12, 45, 98, 73, 60};
                    //2.生成随机交换的索引
    		        Random r = new Random();
    		        int index = r.nextInt(arr.length);
    		        //3.第一次交换
    		        int temp = arr[0];
    		        arr[0] = arr[index];
    		        arr[index] = temp;
    		        //4.第二次交换
    		        index = r.nextInt(arr.length);
    		        temp = arr[1];
    		        arr[1] = arr[index];
    		        arr[index] = temp;
                    //5.遍历交换
    				Random r = new Random();
    				for (int i = 0; i < arr.length; i++) {
    					int index = r.nextInt(arr.length);
    					int temp = arr[i];
    					arr[i] = arr[index];
    					arr[index] = temp;
    				}
    				//6.遍历输出数组[idea快捷方式:arr.fori]
    				for (int i = 0; i < arr.length; i++) {
    					System.out.println(arr[i]);
    				}
    			}
    		}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    四.数组案例练习
    (1)需求:
    定义一个可以存储5个元素的int数组,数据来自于键盘录入,
    最后遍历数组,把元素输出在控制台

     public class ArrayTest {
    	public static void main(String[] args) {
    		//1.定义一个数组,并进行动态初始化
    		int[] arr = new int[5];
    		//2.创建键盘录入对象
    		Scanner sc = new Scanner(System.in);
    		//3.循环录入数据并赋值给数组元素
    		for (int i = 0; i < arr.length; i++) {
    			System.out.println("请输入第" + (i + 1) + "个元素:");
    			arr[i] = sc.nextInt();
    		}
    		//4.调用方法遍历数组
    		printArray(arr);
    	}
    	/* 
    	 *定义一个循环遍历数组方法,并优化输出数组显示。 
    	 */
    	public static void printArray(int[] arr) {
    		System.out.print("["); //输出内容不换行
    		for (int i = 0; i < arr.length; i++) {
    			if(i==arr.length-1) {
    				System.out.print(arr[i]); //输出内容不换行
    			}else {
    				System.out.print(arr[i] + ", "); //输出内容不换行
    			}
    		}
    		System.out.println("]");  //输出内容并换行
    	}
     }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    五.数组内存图
    在这里插入图片描述

    六.数组访问和使用问题
    (1)索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题
    Exception in thread “main” java.lang.ArrayIndexOutOfBoundsException: Index 3 out of bounds for length 3
    int[] arr = new int[3];
    System.out.println(arr[3]);

    (2)空指针异常:对象不再指向堆内存,还想继续访问数据,访问失败
    Exception in thread “main” java.lang.NullPointerException: Cannot load from int array because “arr” is null
    int[] arr = new int[3];
    arr = null;
    System.out.println(arr[0]);
    //解决空指针异常
    if(arr != null) { System.out.println(arr[0]); }

  • 相关阅读:
    MobileSAM论文笔记
    【RocketMQ】NameServer的启动
    多元函数泰勒公式(含黑塞矩阵)
    【阿旭机器学习实战】【24】信用卡用户流失预测实战
    ABC254 F - Rectangle GCD( 数据结构&&gcd)
    express创建服务器,以及前后端联调
    开关、电机、断路器、电热偶、电表接线图大全
    新能源时代来袭,电桩控制板开发为绿色城市发展蓄能
    pyspark dataframe分位数计算
    【推搜】embedding评估 | faiss的topK向量检索
  • 原文地址:https://blog.csdn.net/jinhuding/article/details/128201553