数组中有好多知识,下面我会从六个方面说起,让大家对数组有一定的认识以及会使用数组
目录
1、数组的作用
数组就是一个容器,用于在存储中存储一批同种类型的数据
2、数组的定义
静态初始化数组:①格式1:数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,元素3,...}
②格式2:数据类型[] 数组名称 = {元素1,元素2,元素3,...}
③特点:在定义数组的时候同时为数组定义了数据
④使用场景:一旦确定了数据的具体值,我们就用这种方式存储批量数据。
动态初始化数组:①格式3:数据类型[] 数组名称 == new 数据类型[长度];
②特点:开始只确定数组的类型和长度,不确定具体存入的数据值
③使用场景:适合做一开始不确定具体数据的情况,先定义数组,后赋值诗句进去.
数组的访问: 格式:数组名称[索引]
取值:int data = arr[1];
赋值:arr[1] = 222;
长度:arr.length
数组的注意事项:①什么类型的数组只能存放什么类型的数据。
②数据类型[] 变量名称 可以写成 数据类型 变量名称[]
③数组一旦定义出来,程序执行的过程中,长度、类型就固定了。
动态初始化的元素存在默认值: 数据类
数据类型 | 明细 | 默认值 |
基本类型 | byte、short、char、int、long | 0 |
float、double | 0.0 | |
boolen | false | |
引用类型 | 类、接口、数组、string | null |
3、数组的遍历
数组的遍历: ①什么是遍历? 一个一个的访问数据
②为什么要遍历? 业务开发中都需要用到,统计数据,搜索数据,...
③数组如何遍历:
int[] ages = {20,30,40,50};
for (int i = 0; i < ages.length; i++){
System.out.println(ages[i]);
}
4、数组的案例
需求:5个 1-20之间的随机数,让用户猜,猜中要提示猜中,还要输出该数据在数组中的第一次出现的索引
没有猜中继续猜
package com.itheima.create;
import java.util.Random;
import java.util.Scanner;
public class Test3 {
public static void main(String[] args) {
//需求:5个 1-20之间的随机数,让用户猜,猜中要提示猜中,还要输出该数据在数组中的第一次出现的索引
//没有猜中继续猜
//1、定义一个初始化的数组存储5个随机的1-20之间的数据
int[] data = new int[5];
//2、动态的生成5个1-20之间的随机数并存入到数组中去。
Random r = new Random();
for (int i = 0; i < data.length; i++) {
data[i] = r.nextInt(20)+1;
}
//使用一个死循环让用户猜测
OUT:
while (true){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个1-20的整数进行猜测");
int GuessData = sc.nextInt();
//4、遍历数组中的每个数据,如果猜对了,给出提示
for (int i = 0; i < data.length; i++) {
if (GuessData == data[i]) {
System.out.println("恭喜猜中了,索引是" + i);
break OUT;//结束整个死循环,代表游戏结束了。
}
}
System.out.println("重猜");
}
for (int i = 0; i < data.length; i++) {
System.out.print(data[i]+"\t");
}
}
}
5、数组的内存图
java的内存分配: ①方法区:放Class文件的
②栈内存:运行的方法,main方法,定义的变量
③堆内存:new出来的对象,都在堆内存中
6、数组使用的常见问题
①不要访问超过数组最大的索引,否则会出现数组访问异常。
②空指针异常问题:int[] arr=null;
System.out.println(arr); // null
System.out.println(arr.lenth);//空指针异常