当前位置: 首页 > news >正文

Java数组深入解析:定义、操作、常见问题与高频练习

一、数组的定义

1. 什么是数组

数组是一个容器,用来存储多个相同类型的数据。它属于引用数据类型,可以存储基本数据类型(如int、char)或者引用数据类型(如String、对象)。

2. 数组的定义方式

a. 动态初始化

动态初始化时,只有数组的长度被定义,数组元素的值在之后可以进行赋值。

数据类型[] 数组名 = new 数据类型[长度];
数据类型 数组名[] = new 数据类型[长度];

示例:

// 声明数组
int[] arr;  // 推荐的声明方式
// 或者
int arr[];
// 创建数组arr = new int[5];  // 创建一个长度为5的整数数组// 声明并初始化数组
int[] arr2 = {1, 2, 3, 4, 5, 6};  // 创建并初始化数组

b. 静态初始化

静态初始化时,数组在创建时就已经有了具体的元素值。

数据类型[] 数组名 = new 数据类型[]{元素1, 元素2, ...};

不推荐使用这种方式,因为它显得冗长。

c. 简化的静态初始化

简化静态初始化可以在声明时直接指定数组元素,代码更简洁。

数据类型[] 数组名 = {元素1, 元素2, ...};

示例:

int[] arr = {1, 2, 3, 4, 5};  // 创建一个包含5个整数的数组
String[] names = {"Alice", "Bob", "Charlie"};

二、数组操作

1. 获取数组的长度

数组的长度可以通过 .length 属性来获取。

int[] arr = {100, 200, 300};
int length = arr.length;  // 获取数组的长度,值为3

注意,length 后面没有小括号,因为它不是方法,而是数组的一个属性。

2. 数组的索引

数组元素是通过索引来访问的,索引从 0 开始,最大索引为 length - 1。

int[] arr = {100, 200, 300};
System.out.println(arr[0]);  // 输出 100
System.out.println(arr[1]);  // 输出 200
System.out.println(arr[arr.length-1]);  // 输出 30

3. 存储元素

使用索引将元素存入数组:

arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

4. 获取数组元素

通过索引获取数组中的元素:

int value = arr[0];  // 获取索引0位置的元素

5. 遍历数组

可以使用 for 循环来遍历数组中的元素:

// 普通for循环
int[] arr = {10, 20, 30, 40, 50};
for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);  // 打印数组中的每个元素
}// 增强型for循环
for (int num : arr) {  // 声明一个整数类型的变量 num,用来存储数组中的每个元素System.out.println(num);  // 输出每个元素
}

6. 数组的复制

将一个数组的元素复制到另一个数组中:

int[] arr1 = {1, 2, 3};
int[] arr2 = new int[arr1.length];for (int i = 0; i < arr1.length; i++) {arr2[i] = arr1[i];
}

三、常见问题

1. 数组索引越界异常 (ArrayIndexOutOfBoundsException)

当你访问的索引超出了数组的有效范围时,会抛出该异常。数组索引必须在 0 到 length - 1 之间。

示例:

int[] arr = {0,1, 2, 3};
System.out.println(arr[4]);  // 会抛出 ArrayIndexOutOfBoundsException

2. 空指针异常 (NullPointerException)

如果你尝试访问一个值为 null 的数组或对象,就会发生空指针异常。

示例:

int[] arr = null;
System.out.println(arr.length);  // 会抛出 NullPointerException

四、数组常用练习

1. 求数组最大值

通过遍历数组,找出其中的最大值。

int[] arr = {10, 4, 7, 1, 9};
int max = arr[0];
for (int i = 1; i < arr.length; i++) {if (arr[i] > max) {max = arr[i];}
}
System.out.println("最大值是:" + max);

2. 统计符合条件的数组元素

假设需要统计数组中既能被3整除又能被5整除的元素个数,但不能被7整除。

int count = 0;
for (int i = 0; i < arr.length; i++) {if (arr[i] % 3 == 0 && arr[i] % 5 == 0 && arr[i] % 7 != 0) {count++;}
}
System.out.println("符合条件的元素个数是:" + count);

3. 通过键盘输入并输出数组

Scanner sc = new Scanner(System.in);
String[] arr = new String[3];
for (int i = 0; i < arr.length; i++) {System.out.println("请输入第" + (i + 1) + "个名字:");arr[i] = sc.next();
}
for (String name : arr) {System.out.println(name);
}

4. 数组扩容

如果数组的大小不够,可以创建一个新的数组,并将旧数组的元素复制到新数组中。

int[] oldArr = {1, 2, 3, 4, 5};
int[] newArr = new int[10];
for (int i = 0; i < oldArr.length; i++) {newArr[i] = oldArr[i];
}
oldArr = newArr;  // 让旧数组指向新的扩容数组

5. 数组合并

合并两个数组:

int[] arr1 = {1, 2, 3};
int[] arr2 = {4, 5, 6};
int[] newArr = new int[arr1.length + arr2.length];for (int i = 0; i < arr1.length; i++) {newArr[i] = arr1[i];
}
for (int i = 0; i < arr2.length; i++) {newArr[arr1.length + i] = arr2[i];
}

http://www.mrgr.cn/news/81587.html

相关文章:

  • 可爱狗狗的404动画页面HTML源码
  • vim如何设置自动缩进
  • 布局预览问题
  • SpringBoot注入配置文件application.properties中的信息
  • 65,【5】buuctf web [SUCTF 2019]Upload Labs 2
  • Vue2+OpenLayers实现常用的功能整合(持续更新ing)
  • 高性能编程,C++的无锁和有锁编程方法的性能对比
  • 2023 年 12 月青少年软编等考 C 语言四级真题解析
  • 字节跳动Java开发面试题及参考答案(数据结构算法-手撕面试题)
  • Anaconda搭建Python虚拟环境并在Pycharm中配置(小白也能懂)
  • 【物联网技术与应用】实验16:模拟霍尔传感器实验
  • YOLOv9-0.1部分代码阅读笔记-detect.py
  • 高精度问题
  • H5st5.0.0协议分析
  • 穷举vs暴搜vs深搜vs回溯vs剪枝系列一>括号生成
  • 【c语言】简单的c程序设计
  • 生成10级子目录,每个子目录下有100个不同大小的文件
  • 并发编程 - 死锁的产生、排查与解决方案
  • Javaweb maven单元测试
  • 前缀树介绍
  • Google Cloud Architect 认证考试错题集7
  • 2024大模型在软件开发中的具体应用有哪些?(附实践资料合集)
  • Java(Sprigboot) 项目调用第三方 WebService 接口实现方式
  • 作品分享:基于全志V3s核心板设计(MPCIE金手指设计)
  • 1.微服务灰度发布(方案设计)
  • Ubuntu网络配置(桥接模式, nat模式, host主机模式)