7.javase_数组1

一. 数组定义格式

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

二. 数组初始化方式

	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)数组元素访问代码案例
 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)数组遍历

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]);
				}
			}
		}

(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);
		}
	  }

(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)需求:
定义一个可以存储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)索引越界:访问了数组中不存在的索引对应的元素,造成索引越界问题
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]); }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

java之书

会持续更新实用好的文章谢谢关注

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

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

打赏作者

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

抵扣说明:

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

余额充值