1.4、数组
数组:存储同一种数据类型的多个元素的容器
取值:
数组名 【索引】
定义格式:
A:数据类型[] 数组名;(推荐方式)
B:数据类型 数组名[];
案例:
int[] arr; 定义int类型的数组,名称为 arr
int arr[];定义int类型的变量,变量名为arr数组
数组初始化:
A:数组开辟内存空间,为数组中的每个元素赋值
B:数组初始的方式:
a:动态初始化 只给出长度,系统给初始化值
b:静态初始化 给出初始值,由系统决定长度
动态初始化:
数据类型[] 数组名 = new 数据类型[数组长度];
静态初始化:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2….};
简化格式:
数据类型[] 数组名 ={元素1,元素2,…}
动态初始化
package com.data.it;
/**
* Created by JackFeng on 2020/3/1.
*/
public class MyArrayDemo {
public static void main(String[] args) {
//数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
// 释义
/*
* 左边:
* int:说明数组中的元素类型是 int 类型
* []: 说明是个数组
* arr:数组名称
*
* 右边:
* new :为数组申请内存分配空间
* int:数组中的元素是int类型
* []:数组
* 3:数组的长度----数组中元素的个数
* */
//输出数组名
System.out.println("arr"+arr); //[I@4554617c
// 获取的是地址值,如何获取数组中的元素值
// 数组中的元素都是有编号的,从0 开始,最大编号是 数组的长度-1
// 索引 arr[0]
// 取值:数组名 配合 元素编号
// 访问格式:数组名[索引]
System.out.println(arr[0]); //0
System.out.println(arr[1]); // 0
System.out.println(arr[2]); //0
// 赋值
arr[0] = 100;
arr[2] = 200;
System.out.println("=====");
System.out.println(arr); // 001
System.out.println(arr[0]); //100
System.out.println(arr[1]); // 0
System.out.println(arr[2]); //200
// 指向一个数组
// arr1 数组
int[] arr1 = new int[3];
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
int[] arr2 = arr1;
arr1[0] =111;
arr1[1] =222;
arr1[2] =123;
System.out.println("=============");
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
System.out.println(arr2);
System.out.println(arr2[0]);
System.out.println(arr2[1]);
System.out.println(arr2[2]);
}
}
静态初始化
package com.data.it;
/**
* Created by JackFeng on 2020/3/1.
*/
public class ArraryDemo {
public static void main(String[] args) {
int[] arr = new int[]{1,2,3};
int[] arr1 = {1, 2, 3};
System.out.println(arr);
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
//
System.out.println("----------");
System.out.println(arr1);
System.out.println(arr1[0]);
System.out.println(arr1[1]);
System.out.println(arr1[2]);
}
}
常见小问题
小问题:
ArrayIndexOutOfBoundsException: 数组索引越界异常
原因 我们访问了不存在的索引
NullPointerException:空指针异常
原因 数组已经不在指向堆内存的数据了,还使用数组名去访问数组中的数据
数组遍历练习
package com.data.it;
/**
* Created by JackFeng on 2020/3/1.
*/
public class ArrayTest {
public static void main(String[] args) {
// 定义数组
int[] arr = {1, 2, 3, 4, 5, 6};
// 通过for循环遍历输出 ,调用 数组属性:length
// 格式:数组名.length
for (int i = 0; i <arr.length ; i++) {
System.out.println(arr[i]);
}
}
}
取最值
思路:
A:先拿数组中的一个元素做参照物
B:遍历数组,让后边所有元素依次和参照物进行比较,如果元素比参照物大,就留下
C:整个循环遍历比较,留下的就是最大值
package com.data.it;
/**
* Created by JackFeng on 2020/3/1.
*/
public class ArrayTest1 {
public static void main(String[] args) {
// 取最大值
int[] arr = {1, 2, 3, 55, 22, 10};
// 定义一个参照值
int max = arr[0];
// 循环遍历整个数组
for (int i = 1; i <arr.length ; i++) {
if (arr[i]>max){
max = arr[i];
}
}
System.out.println("最大值为:"+max);
}
}
二维数组
二维数组:元素为一堆数组的数组
定义格式:
A:数据类型[ ] [ ] 数组名; (推荐的方式)
B:数据类型 数组名[ ] [ ]
C:数据类型[ ] 数组名[ ]
初始化:
A:动态初始化
数据类型[ ] [ ] 数组名 = new 数据类型[m] [n];
m 表示的是 二维数组中一维数组的个数
n 表示的是 一维数组中的元素个数
B:静态初始化
数据类型[ ] [ ] 数组名 = {{1,…},{2….},{3….}}
数据类型[ ] [ ] 数组名 = new 数据类型[ ] [ ] {{元素…},{元素….}}
简化格式:
取值:
二维数组名配合索引可以获取到每一个一维数组 【arr[索引]】
一维数组配合索引名可以获取到数组中的元素【arr[索引] [索引]】
二维数组取值
package com.data.it;
/**
* Created by JackFeng on 2020/3/1.
*/
public class Array2Test {
public static void main(String[] args) {
//数据类型[] [] 数组名 = {{元素..},{元素...}}
int[][] arr = {{1, 2, 3}, {1, 3, 6}, {2, 3, 6}};
//
// System.out.println(arr);
// System.out.println(arr[0]);
// System.out.println(arr[0][0]);
// 遍历二维数组
// 第一个数组的元素
for (int i = 0; i <arr[0].length ; i++) {
System.out.println(arr[0][i]);
}
System.out.println("==========");
// 第二个数组的元素
for (int i = 0; i <arr[2].length ; i++) {
System.out.println(arr[0][i]);
}
// 优化循环二维数组
System.out.println(" -----------");
// 二维数组 arr.length 就是有几个 一维数组
for (int i = 0; i < arr.length ; i++) {
for (int j = 0; j <arr[i].length ; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println("====");
}
}
}
期待您的进步