一、数组的初始化
- 动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。
- 静态初始化:初始化时,就可以指定数组要存储的元素,系统会自动计算该数组的长度。
//动态初始化
int[] arr = new int[2];
System.out.println(arr); //打印的是数组对象在内存中的地址
//系统会为数组分配初始化值。
System.out.println(arr[0]); //0
System.out.println(arr[1]); //0
//静态初始化
int arr2 = {1,2,3};
二、Java中的内存分配
- 栈内存:方法运行时,进入的内存,局部变量都存放在这里。
- 堆内存:new出来的对象都在这里,并且存在对应的地址值。
- 方法区:.class文件加载时进入的内存。
这里通过对一个java类进行解析说明
public class DemoArr {
public static void main(String[] args) {
int[] arr = new int[2];
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
arr[0] = 11;
arr[1] = 22;
System.out.println(arr[0]);
System.out.println(arr[1]);
}
}
三、数组遍历获取最值
- 遍历获取数组元素最大值
public static void main(String[] args) {
int[] arr = {11,23,19};
//暂且定义arr[0]为数组元素的最大值
int max = arr[0];
for(int i = 0; i < arr.length; i++){
//遍历获取元素,依次比较赋值
if(arr[i] > max){
max = arr[i];
}
}
System.out.println(max);
}
四、数组元素求和
- 键盘录入数组元素并求和
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int sum = 0;
int[] arr = new int[5];
for(int i = 0; i < arr.length; i++){
//遍历赋值
arr[i] = sc.nextInt();
sum += arr[i];
}
System.out.println(sum);
}
五、查找数组元素对应的索引
- 键盘录入一个数字查询它在数组中对应的元素索引
public static void main(String[] args) {
int[] arr = {11,24,43,21};
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
//定义一个索引变量,初始值为-1
int index = -1;
for(int i = 0; i < arr.length; i++) {
if(arr[i] == num) {
index = i;
}
}
System.out.println("输入数字在数组中的索引为:" + index);
}
六、数组反转
- 将一个数组的元素头尾交换,获得新的数组
public static void main(String[] args) {
int arr = {18, 25, 33, 45, 51};
// 定义开始索引和结束索引
int start = 0;
int end = arr.length - 1;
for(; start < end; start++; end--) {
// 定义临时变量进行数据交换
int temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
// 重写遍历打印
for(int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
七、二维数组
- 动态初始化格式:
数据类型[][] 变量名 = new 数据类型[m][n];
m表示这个二维数组,可以存放m个一维数组,
n表示每一个一维数组,可以存放多少个元素,
- 二维数组访问数字元素的细节
public static void main(String[] args) {
int[][] arr = new int[3][3];
/*
这里赋值失败是因为创建数组时,
元素索引固定,但再次赋值时却访问了不存在的所以
*/
arr[0][3] = 11; //false
/*
而这里成功是因为发生了对象地址指向的替换。
即指向新的一维数组对象地址值。
*/
int[] arr2 = {111, 222, 333, 444};
arr[2] = arr2;
System.out.println(arr[2][3]);
}
- 二维数组的遍历求和
public static void main(String[] args) {
int[][] arr = {{11,22,33},{44,55,66}};
int sum = 0;
// 首先遍历得到每一个一维数组
for(int i = 0; i < arr.length; i++){
// 其次遍历得到每一个一维数组中的元素
for(int j = 0; j < arr[i].length; j++) {
System.out.println(arr[i][j]);
sum += arr[i][j];
}
}
System.out.println(sum);
}