定义数组和使用
数组
一组数组相当于酒店的一个楼层,首地址就是楼层数,下表就是房间号
定义数组:
int[] array = new int[10];
需要操作数组中哪一个元素,这里需要使用数组的【下标】
计算机内数据的开头都是从0开始,数组容量为10的情况
有效下标的范围
0 ~ 9
0 ~ 数组容量 Capacity - 1
操作格式:
数组名[有效下标]
/* 演示数组的定义和使用 */
class Demo2 {
public static void main(String[] args) {
/* 这里定义一个int类型的数组,数组的容量为10 */
int[] array = new int[10];
/*
给数组中下标为0的元素赋值
格式: 数组名[有效下标]
*/
array[0] = 10;
/*
给数组中下标为5的元素赋值
*/
array[5] = 20;
/*
给数组下标为10的元素赋值30
10 已经超出了有效下标范围 0 ~ 9
array[10] = 30;
*/
/*
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Demo2.main(Demo2.java:22)
ArrayIndexOutOfBoundsException 数组下标越界异常
*/
/*
给数组中下标为-1的元素赋值为20
-1 已经超出了有效下标范围 0 ~ 9
*/
// array[-1] = 20;
/*
java.lang.ArrayIndexOutOfBoundsException: -1
*/
/*
取出数组中下标为0和下标为5的元素内容
*/
System.out.println("array[0] : " + array[0]);
System.out.println("array[5] : " + array[5]);
// System.out.println("array[4] : " + array[4]);
}
}
数组关系极为密切是for循环!!!
class Demo3 {
public static void main(String[] args) {
/* 定义一个int类型数组 容量为10 */
int[] arr = new int[10];
/*
数组名.length
获取当前数组的【容量 Capacity】,获取数组的【属性】
*/
for (int i = 0; i < arr.length; i++) {
// 给数组中每一个元素赋值操作
arr[i] = i + 1;
}
// 利用循环展示数据
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
数组地址转移问题
public static void main(String[] args) {
int[] arr1 = new int[10];
int[] arr2 = new int[10];
arr1[0] = 10;
arr2[0] = 20;
System.out.println("arr1[0]:" + arr1[0]);
System.out.println("arr2[0]:" + arr2[0]);
arr1[5] = 50;
arr2 = arr1;
arr1[0] = 30;
arr2[0] = 100;
System.out.println("arr1[0]:" + arr1[0]);
System.out.println("arr2[0]:" + arr2[0]);
System.out.println("arr2[5]:" + arr2[5]);
/*
1. 报错
2. 30 30 50
3. 100 100 50 true
4. 30 100 50
5. 50 100 50
6. 30 100 0
*/
}
class Demo2 {
public static void main(String[] args) {
int[] array = {10, 8, 35, 67, 31, 25, 11, 30, 28, 99};
int find = 13;
// 调用的方法需要数组作为方法的参数,
// 这里传入【数组名】
int index = indexOf(array, find);
if (index >= 0) {
System.out.println("index : " + index);
} else {
System.out.println("Not Found!");
}
}
/**
* 在指定数组arr中,查询指定元素find所在的下标位置,找到返回值大于等于0,没有找到
* 返回-1
*
* @param arr 查询数据的源数据数组,int类型数组
* @param find 指定在数组中查询的数据,也是对应int类型
* @return 找到指定元素,返回值大于等于0,否则返回-1
*/
public static int indexOf(int[] arr, int find) {
// 假设查询的数据不存在
int index = -1;
// 遍历整个数组
for (int i = 0; i < arr.length; i++) {
// 发现数组中下标为i的元素和find一致,找到内容,保存下标
if (find == arr[i]) {
index = i;
// 终止循环
break;
}
}
// 返回index中保存的数据
return index;
}
}
总结
- 数组作为方法参数的固定格式
(数据类型[] 数组参数名) - 数组作为方法的实际参数的固定格式
(数组名) - 数组名作为方法的参数,实际传递的是数组空间首地址,就是和数组地址转移问题是一致的
- 方法执行需要参数,如果没有给予对应格式的实际参数,直接报错