编辑
一、数组介绍
数组指一种容器,可以存储同种类型的多个值
为什么要使用数组容器?
假设我要计算销售部门的员工业绩,以往的方案是定义变量来保存数据,但是数据一多,变量就要定义一堆,操作起来非常不方方便!但是存入一个容器就好操作了,数据不再零零散散,而是一个整体了。
二 、数组定义格式
静态初始化
完整格式:数据类型[] 数组名 = new 数据类型{元素1,元素2,......};
简化格式:数据类型[] 数组名 = {};
动态初始化
(初始化时只指定数组长度,由系统为数组分配初始值)
数据类型[] 数组名= new 数据类型[数组长度]
三、数组的元素访问
-
格式:数组名[索引];
-
索引:索引是数组容器中空间的编号,编号从0开始,逐个+1增长
public class ArraysDemo1 { public static void main(String[] args) { int[]arr1 = new int[]{1,2,3,4}; System.out.println(arr1[0]); } }
四、数组的遍历操作
数组遍历:依次访问数组中的每一个元素
public class ArrayDemo3 {
/*
数组遍历操作: 依次访问数组中的每一个元素
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
弊端: 代码过于臃肿
优化: 使用循环来进行优化
for(int i = 0; i < 5; i++){
// i = 0 1 2 3 4
System.out.println(arr[i]);
}
弊端: 数组的长度不是动态获取的
优化: 数组名.length
-------------------------------------------
数组的通用遍历方式:
for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}
*/
public static void main(String[] args) {
int[] arr = {11, 22, 33, 44, 55};
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
数组求和案例
public class ArraysDemo2 {
public static void main(String[] args) {
// 已知数组元素为{11,22,33,44,55)请将数组中偶数元素取出并求和,最后打印求和结果
int[] arr = {11,22,33,44,55};
int sum = 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i]%2==0){
sum+=arr[i];
}
}
System.out.println(sum);
}
}
-
数组案例-求最大值
- 需求:已知数组元素为 {5,44,33,55,22} 请找出数组中最大值并打印在控制台
public class ArraysDemo4 {
public static void main(String[] args) {
// - 需求:已知数组元素为 {5,44,33,55,22} 请找出数组中最大值并打印在控制台
int []arr = {5,44,33,55,22};
int max= 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i]>max){
max=arr[i];
}
}
System.out.println("最大值"+max);
}
}
-
数组案例-数组反转操作(⭐️⭐️⭐️)
public class ArraysDemo5 {
public static void main(String[] args) {
// 需求:
//
// 已知一个数组 arr = {11, 22, 33, 44, 55}; 用程序实现把数组中的元素值交换,
//
// 交换后的数组 arr = {55, 44, 33, 22, 11}; 并在控制台输出交换后的数组元素。
int []arr = {11, 22, 33, 44, 55};
for (int start = 0, end = arr.length-1; start < end; start++,end--) {
int temp = arr[start];
arr[start] = arr[end];
arr[end] =temp;
}
}
}
综合案例-评委打分
public class ArraysDemo6 {
public static void main(String[] args) {
// 需求:
// 在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分
// 选手的最后得分为:去掉一个最高分和一个最低分后 的4个评委平均值
// 1.定义动态数组
int[]arr = new int[6];
// 2.键盘录入数据
for (int i = 0; i < arr.length; i++) {
System.out.println("请评委打分");
Scanner sc =new Scanner(System.in);
arr[i] = sc.nextInt();
}
// 求出总成绩
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum+=arr[i];
}
int max= getMax(arr);
int min= getMin(arr);
// 求出去掉一个最高分和一个最低分后 的4个评委平均值
int average = (sum-max-max)/4;
System.out.println("平均值"+average);
}
// 定义方法获取最大值
public static int getMax(int []arr){
int max= 0;
for (int i = 0; i < arr.length; i++) {
if (arr[i]>max){
max =arr[i];
}
}
return max;
}
// 定义方法获取最小值
public static int getMin(int []arr){
int min = arr.length-1;
for (int i = 0; i < arr.length; i++) {
if (min<arr[i]){
min= arr[i];
}
}
return min;
}
}
-
数组常见的两个问题
-
数组索引越界异常
-
数组索引越界异常: IndexOutOfBoundsException 访问了数组中不存在的索引
-
public class IndexOutOfBoundsExceptionDemo { /* 数组索引越界异常: IndexOutOfBoundsException 访问了数组中不存在的索引 */ public static void main(String[] args) { int[] arr = {11, 22, 33}; System.out.println(arr[10]); for(int i = 0; i <= arr.length; i++){ // i = 0 1 2 3 System.out.println(arr[i]); } } } -
空指针异常
-
空指针异常: NullPointerException 当引用数据类型变量被赋值为 null 之后, 地址的指向被切断, 还继续访问堆内存数据, 就会引发空指针异常
-
public class NullPointerExceptionDemo { /* 空指针异常: NullPointerException 当引用数据类型变量被赋值为 null 之后, 地址的指向被切断, 还继续访问堆内存数据, 就会引发空指针异常 */ public static void main(String[] args) { int[] arr = {11, 22, 33}; arr = null; System.out.println(arr[0]); } }