一、数组
1、数据结构
数据结构:计算机中存储、组织数据的方式
2、数组概念
数组是用于存储多个数据,在内存空间中,是连续存储的。数组中的length属性,是用来计算数组的长度的,数组通过下标的方式进行访问,从0开始
3、数组声明
数组声明有三种方式:
-
静态声明,知道数组中的数据时,用静态声明
数据类型[] 变量名 = new 数据类型[]{值,值,…}
数据类型[] 变量名 = {值,值,…}
int[] arr1 = {1,2,3,4}
int[] arr2 = new int[]{2,3,4}
- 动态声明,不知道时用动态声明
需要指定长度,数组中保存的为对应类型的默认值
数据类型[] 变量名 = new 数据类型[长度];
int[] arr3 = new int[8];
4、数组使用
4.1 查询数组
数组[下标] 下标从0开始
// 1 查询 : 数组[下标] 下标从0开始
System.out.println(arr[3]);
// 最后一个数据
System.out.println(arr[4]);
System.out.println(arr[arr.length - 1]);
4.2 修改数组
数组[下标] = 值;
arr[2] = 33;
4.3 遍历数组
打印出数组中的数据
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
5、数组异常
5.1 下标越界
java.lang.ArrayIndexOutOfBoundsException: 3
当下标小于0 或 大于等于length的时候,就会出现这个异常
5.2 空指针异常
java.lang.NullPointerException
当一个对象是null的时候,我们进行了成员属性访问,就会出现空指针异常
6、传值和传址
传值指的是基本类型传递
传址指的是引用类型传递
7、数组复制
public static void main(String[] args) {
int[] src = { 1, 2, 3, 4, 5, 6 };
int[] dest = { 11, 12, 13, 14, 15, 16 };
// 把src中的4,5,6 放到 14,15,16 这里
// m1(src, 3, dest, 3, 3);
// 源数组 , 源数组起始位置 , 目标数组 , 目标数组起始位置 , 复制个数
System.arraycopy(src, 3, dest, 3, 3);
for (int i = 0; i < dest.length; i++) {
System.out.println(dest[i]);
}
}
public static void m1(int[] src, int srcIndex, int[] dest, int destIndex,
int length) {
for (int i = 0; i < length; i++) {
dest[destIndex] = src[srcIndex];
destIndex++;
srcIndex++;
}
}
二、二维数组
1、数组声明
数据类型[][] 变量名 = {值,值,…}
数据类型[] 变量名 = new 数据类型[][]
int[][] arr == new int[10][];
//三角形
for(int i = 0;i < arr.length - 1;i++){
arr[i] = new int[i+1];
}
2、数组使用
// 获取第一个一维数组中的第一个数据
int[] arr2_0 = arr2[0];
int arr2_0_0 = arr2_0[0];
System.out.println(arr2_0_0);
System.out.println(arr2[0][0]);
// 获取最后一个一维数组中的最后一个数据
int[] arr2_3 = arr2[arr2.length - 1];
int arr2_3_2 = arr2_3[arr2_3.length - 1];
System.out.println(arr2_3_2);
System.out
.println(arr2[arr2.length - 1][arr2[arr2.length - 1].length - 1]);
// 修改
// 把第二个一维数组中的第二个数据改成33
int[] arr2_1 = arr2[1];
arr2_1[1] = 33;
arr2[1][1] = 33;
// 遍历
for (int j = 0; j < arr2.length; j++) {
// int[] arrJ = arr2[j];
for (int k = 0; k < arr2[j].length; k++) {
System.out.print(arr2[j][k] + " ");
}
System.out.println();
}
3、接受用户输入
// 导入依赖包
import java.util.Scanner;
public class Array_09_Scanner {
public static void main(String[] args) {
// 接收用户输入
Scanner scanner = new Scanner(System.in);
// 程序执行到这里,就会进入等待,等待用户输入之后,再继续执行
// next : 接收用户输入的数据,按回车终止
// 并且 空格是分隔符,一个next 只能获取一个
String input = scanner.next();
System.out.println(input);
// 接收一行,不需要分隔符, 按回车终止
String input = scanner.nextLine();
System.out.println(input);
// 接收int类型的值,不能有汉字及特殊符号,必须是纯数字,小数点也不能有,
// 否则会报错 java.util.InputMismatchException
// 空格是分隔符
int input = scanner.nextInt();
System.out.println(input);
// 具体用法同nextInt , 只是可以识别一个小数点
double input = scanner.nextDouble();
System.out.println(input);
}
}