数组的定义

静态初始化数组
image.png
注意:数组变量名中存储的是数组在内存中的地址,这点和c是一样的,数组是引用类型(同指针)

l 数组的长度:数组名.length;
l 数组的最大索引怎么表示:数组名.length-1;
image.png
java 的数组和js的数组不一样。Js可以存放任何类型的数据。
image.png
静态初始化和动态初始化不能混用。这点和c语言不一样。

动态初始化数组:是指预先在内存中申请一部分内存,然后把默认值放在其中。
image.png
静态与动态的区别:
当前已经知道存储值的是静态;当前不知道存储值的是动态。

动态初始化数组的元素默认值
image.png
1、注意:char的默认值是0,string的默认值是null。
2、引用类型的数据类型:包括类、接口、数组、string。【基本数据类型变量:存放的是数据本身。引用数据类型变量:存放的是对象的地址。例如:数组。】

数组的遍历

image.png
数组遍历的快捷键:数组名.fori;

Java提示解析时已到达文件结尾的解决方法:一般是缺少括号或分号。

数组的案例

image.png
可以用
OUT:
break OUT;//来结束整个循环,而break只能跳出这轮循环。

完成该猜数字游戏的代码:
1. public class GuessNumber2 {
2. public static void main(String[] args) {
3. Random number = new Random();
4. Scanner enter = new Scanner(System.in);
5. int[] range = new int[5];
6. for (int i = 0; i < range.length; i++) {
7. range[i]= number.nextInt(20)+1;
8. }
9. OUT:
10. while (true)
11. {
12. System.out.println(“请输入一个数字:”);
13. int data = enter.nextInt();
14. int i;
15. for (i = 0;i < range.length; i++) {
16. if (range[i] == data)
17. {
18. System.out.println(“运气不错,猜中了”);
19. System.out.println(“该数在数组中的位置”+(i+1));
20. break OUT;
21. }
22. }
23. System.out.println(“未命中。”);
24. }
25. System.out.println(“整个数组为:”);
26. for (int i1 = 0; i1 < range.length; i1++) {
27. System.out.print(range[i1]+”\t”);
28. }
29. }
30. }

随机排名
总结:如何实现随机排名
1、定义一个动态初始化的数组用于录入数据;
2、遍历数组中的每个元素,每次随机一个索引值,让当前元素与该索引位置的元素进行交换
3、遍历输出数组中的内容。
1. public class RandomRank {
2. public static void main(String[] args) {
3. int[] group=new int[]{22,33,35,13,88};
4. Random rank=new Random();
5. //3、遍历数组中的每个元素,然后随机一个索引出来,让该元素与随机索引位置处的元素值进行交换()
6. for (int i = 0; i < group.length; i++) {
7. int j=rank.nextInt(5);
8. int temp=group[i];
9. group[i]=group[j];
10. group[j]=temp;
11. System.out.print(“第”+(i+1)+”次的顺序是:”);
12. for(int k=0;k13. {
14. System.out.print(group[k]+”\t”);
15. }
16. System.out.println(“ “);
17. }
18. for (int i = 0; i < group.length; i++) {
19. System.out.print(group[i]+”\t”);
20. }
21. }
22. }

数组排序

image.png
Java冒泡排序
1. package 冒泡排序;
2. import java.util.Arrays;
3. public class BubbleSort {
4. public static void BubbleSort(int[] arr) {
5. int temp;//定义一个临时变量
6. for(int i=0;i7. for(int j=0;j8. if(arr[j+1]9. temp = arr[j];
10. arr[j] = arr[j+1];
11. arr[j+1] = temp;
12. }
13. }
14. }
15. }
16. public static void main(String[] args) {
17. int arr[] = new int[]{1,6,2,2,5};
18. BubbleSort.BubbleSort(arr);
19. System.out.println(Arrays.toString(arr));
20. }
21. }

注意:增强for:只用于遍历数组。对集合进行遍历,只能获取集合元素,不能对集合进行操作
格式:
for(数据类型 变量名 :被遍历的集合(collection)或者数组) {
执行语句
}
例如:
for (String temp : list){
s += temp; //省去了对强制类型转换步骤
}

数组的内存图

Java内存分配、数组内存图
Java内存分配:栈、堆、方法区、本地方法区、寄存器
Ø 方法区:字节码文件加载时,进入的内存;字节码文件:java编译后的class文件就是字节码文件,java编译后,文件放入方法区。
Ø 栈内存:方法运行时进入的内存,变量也是在这里。例如:main方法放入栈内存运行,main方法的变量也是放在栈内存中的,变量中存放的是对象的地址。
Ø 堆内存:new出来的对象会在这块内存中开辟空间并产生地址。
注意:基本数据类型变量:存放的是数据本身。引用数据类型变量:存放的是对象的地址。例如:数组
image.png
过程分析:
1. public class new1 {
2. public static void main(String[] args) {
3. //将这个类编译乘class文件,然后加载到方法区中。
4. // 之后将main方法放到栈内存中。
5. int a=10;
6. //在栈内存中开辟一块区域,因为a是基本数据类型,所以该区域存放a的数据。
7. int[]array=new int[]{11,22,33};
8. //在栈内存中加载数组变量(引用变量),但此时还没有存数据。
9. // 之后在堆内存中开辟出区域存放数组对象,
10. // 将该区域在堆内存中的地址赋给栈内存中的引用变量。
11. array[0]=44;
12. }
13. }

数组常见问题

image.png

Debug工具

image.png