在Java编程中,数组作为一种基础且重要的数据结构,常用于存储多个相同类型的数据,掌握数组的输入方法,是处理实际数据的前提,本文将详细介绍Java数组的常见输入方式,包括控制台输入、文件输入及代码初始化,并总结注意事项,帮助开发者灵活应对不同场景。

控制台输入:Scanner与BufferedReader的选择
控制台输入是最直接的交互方式,Java提供了多种工具实现数组输入,其中Scanner和BufferedReader最为常用。
使用Scanner实现输入
Scanner类位于java.util包,提供了便捷的输入方法,适合处理基本数据类型和字符串,以整数数组为例,步骤如下:
- 创建Scanner对象,关联System.in(标准输入流);
- 先输入数组长度,再通过循环逐个读取元素并存储到数组中。
示例代码:import java.util.Scanner;
public class ArrayInput {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print(“请输入数组长度:”);
int length = scanner.nextInt();
int[] arr = new int[length];
System.out.println("请输入" + length + "个整数:");
for (int i = 0; i < length; i++) {
arr[i] = scanner.nextInt();
}
// 输出验证
System.out.println("数组元素为:");
for (int num : arr) {
System.out.print(num + " ");
}
scanner.close();
}
Scanner的优点是代码简洁,支持多种数据类型(如nextInt()、nextDouble()等),但处理大量数据时效率较低。
#### 2. 使用BufferedReader提升效率
BufferedReader通过缓冲机制提高读取速度,适合处理大容量数据输入,需结合InputStreamReader和StreamTokenizer类,步骤稍复杂:
- 创建BufferedReader对象,包装InputStreamReader(System.in);
- 读取一行输入,通过split()方法分割字符串,再转换为数组元素。
示例代码:
```java
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BufferedReaderInput {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print("请输入数组元素(用空格分隔):");
String[] inputStr = reader.readLine().split(" ");
int[] arr = new int[inputStr.length];
for (int i = 0; i < inputStr.length; i++) {
arr[i] = Integer.parseInt(inputStr[i]);
}
System.out.println("数组元素为:");
for (int num : arr) {
System.out.print(num + " ");
}
}
}
BufferedReader的效率更高,但需要手动处理数据类型转换和异常(如数字格式异常)。

文件输入:读取外部数据到数组
在实际开发中,数据常存储在文件中,通过文件读取将数据加载到数组是常见需求,以文本文件为例,可使用BufferedReader逐行读取并解析:
- 使用FileReader打开文件,BufferedReader缓冲读取;
- 读取文件内容(如每行一个元素或一行多个元素),分割后转换为数组。
示例代码(假设文件data.txt包含整数,每行一个):import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException;
public class FileInput {
public static void main(String[] args) {
try (BufferedReader reader = new BufferedReader(new FileReader(“data.txt”))) {
String line;
int[] arr = new int[100]; // 假设最大长度100
int index = 0;
while ((line = reader.readLine()) != null) {
arr[index++] = Integer.parseInt(line.trim());
}
// 截取有效长度
int[] result = new int[index];
System.arraycopy(arr, 0, result, 0, index);
System.out.println("文件读取的数组:");
for (int num : result) {
System.out.print(num + " ");
}
} catch (IOException e) {
System.out.println("文件读取失败:" + e.getMessage());
}
}
文件输入需注意异常处理(如文件不存在、权限问题),以及动态调整数组长度(可先使用List存储,再转为数组)。
### 三、代码初始化:直接赋值与动态创建
除了外部输入,数组也可通过代码直接初始化,适用于已知固定数据的场景。
#### 1. 静态初始化
在声明数组时直接赋值,由系统自动计算长度。
```java
int[] arr1 = {1, 2, 3, 4, 5}; // 静态初始化,长度为5
String[] arr2 = {"Java", "Python", "C++"};
动态初始化
先声明数组并指定长度,再通过循环或索引赋值。
int[] arr3 = new int[3]; // 声明长度为3的数组
arr3[0] = 10;
arr3[1] = 20;
arr3[2] = 30;
// 或通过循环赋值
for (int i = 0; i < arr3.length; i++) {
arr3[i] = (i + 1) * 10;
}
代码初始化适用于测试、固定配置等场景,无需用户输入,效率高且可控。

注意事项:边界处理与异常规避
无论采用哪种输入方式,均需注意以下关键点:
- 数组边界检查:确保输入元素数量不超过数组长度,避免ArrayIndexOutOfBoundsException;
- 数据类型匹配:输入数据需与数组类型一致(如输入字符串转整数时,需捕获NumberFormatException);
- 资源释放:使用BufferedReader等IO流时,建议通过try-with-resources自动关闭资源,避免泄漏;
- 异常处理:对可能出现的异常(如文件不存在、输入格式错误)进行捕获和处理,增强程序健壮性。
通过控制台、文件及代码初始化,Java数组可实现多样化的数据输入,开发者需根据场景需求选择合适的方式:交互式输入用Scanner,高效文件读取用BufferedReader,固定数据用代码初始化,注重异常处理和边界检查,才能编写出稳定可靠的数组操作代码。











