在Java编程中,数组是一种基础且重要的数据结构,用于存储固定大小的同类型元素,将数据输入到数组是许多应用程序的核心操作,无论是处理用户输入、读取文件数据还是接收命令行参数,都需要掌握多种输入方法,本文将详细介绍Java中不同场景下将数据输入到数组的实现方式,包括控制台输入、文件输入、动态交互输入及命令行参数输入,并附上代码示例和注意事项,帮助开发者灵活应对实际需求。

控制台输入到数组:使用Scanner类实现交互式录入
控制台输入是最常见的交互方式,尤其适用于需要用户实时录入数据的场景,Java提供了java.util.Scanner类,简化了控制台数据的读取过程。
基本步骤:
- 创建Scanner对象:通过
System.in(标准输入流)初始化Scanner。 - 确定数组长度:提示用户输入数组元素数量,或直接固定长度。
- 循环读取元素:使用
Scanner的nextInt()(基本类型)、nextLine()(字符串)等方法逐个读取元素,并存入数组。
代码示例(整数数组输入):
import java.util.Scanner;
public class ConsoleInputArray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入数组长度:");
int length = scanner.nextInt();
int[] numbers = new int[length];
System.out.println("请输入" + length + "个整数:");
for (int i = 0; i < length; i++) {
numbers[i] = scanner.nextInt(); // 读取整数存入数组
}
System.out.print("输入的数组为:");
for (int num : numbers) {
System.out.print(num + " ");
}
scanner.close();
}
}
注意事项:
- 输入类型匹配:若用户输入类型与
Scanner方法不匹配(如期望整数但输入字符串),会抛出InputMismatchException,需结合try-catch处理异常。 - 换行符问题:使用
nextInt()后,若后续调用nextLine(),需先用scanner.nextLine()消费换行符,避免读取到空字符串。
文件输入到数组:批量读取外部数据
在数据处理、日志分析等场景中,数据常存储在文件中,通过Java的I/O流,可将文件内容读取到数组中。
基本步骤:
- 创建文件流对象:使用
FileReader(字符流)或FileInputStream(字节流)读取文件。 - 缓冲流提升效率:结合
BufferedReader(字符缓冲流)或BufferedInputStream(字节缓冲流),减少I/O操作次数。 - 逐行/逐块读取:按行读取文本文件,或按固定长度读取二进制数据,并存入数组。
代码示例(文本文件中数字读取到数组):
假设文件numbers.txt内容为:
10 20 30 40 50
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
public class FileInputArray {
public static void main(String[] args) {
String filePath = "numbers.txt";
try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) {
String line = reader.readLine(); // 读取一行数据
String[] numberStrs = line.split(" "); // 按空格分割字符串
int[] numbers = new int[numberStrs.length];
for (int i = 0; i < numberStrs.length; i++) {
numbers[i] = Integer.parseInt(numberStrs[i]); // 转换为整数存入数组
}
System.out.print("文件读取的数组为:");
for (int num : numbers) {
System.out.print(num + " ");
}
} catch (IOException e) {
System.err.println("文件读取失败:" + e.getMessage());
}
}
}
注意事项:
- 异常处理:文件可能不存在或读取失败,需用
try-with-resources自动关闭资源,并捕获IOException。 - 数据格式:若文件中包含非数字字符,
Integer.parseInt()会抛出NumberFormatException,需提前校验数据格式。
动态交互输入到数组:灵活处理可变长度数据
当数组长度不确定时,可通过动态交互方式让用户自由输入元素,例如输入特定结束符(如“q”)时停止录入。

实现思路:
使用ArrayList动态存储输入元素,最后转换为数组。
代码示例:
import java.util.ArrayList;
import java.util.Scanner;
public class DynamicInputArray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<String> list = new ArrayList<>();
System.out.println("请输入字符串元素(输入q结束):");
while (true) {
String input = scanner.nextLine();
if ("q".equals(input)) {
break;
}
list.add(input); // 动态添加元素到列表
}
// 将ArrayList转换为数组
String[] strings = list.toArray(new String[0]);
System.out.print("输入的数组为:");
for (String str : strings) {
System.out.print(str + " ");
}
scanner.close();
}
}
注意事项:
- 动态扩容:
ArrayList会自动扩容,但需注意转换数组时指定类型(如new String[0])。 - 结束符设计:选择不易与正常数据冲突的结束符(如“exit”、“#”),避免误判。
命令行参数输入到数组:接收程序启动时的数据
Java程序的main方法有一个参数String[] args,用于接收命令行启动时传入的参数。
使用方式:
在命令行执行程序时,通过空格分隔参数,
java CommandLineArray 10 20 30 40
程序中args数组即为["10", "20", "30", "40"]。

代码示例:
public class CommandLineArray {
public static void main(String[] args) {
if (args.length == 0) {
System.out.println("未传入命令行参数");
return;
}
int[] numbers = new int[args.length];
for (int i = 0; i < args.length; i++) {
numbers[i] = Integer.parseInt(args[i]); // 将字符串参数转为整数
}
System.out.print("命令行参数数组为:");
for (int num : numbers) {
System.out.print(num + " ");
}
}
}
注意事项:
- 参数类型:命令行参数均为字符串类型,需根据需求转换为基本类型(如
int、double)。 - 参数校验:若用户传入非数字参数,
Integer.parseInt()会抛出异常,需添加校验逻辑。
输入验证与异常处理:提升代码健壮性
无论采用哪种输入方式,都需要处理可能的异常情况,确保程序稳定运行。
常见异常及解决方案:
- 数组越界:输入元素数量超过数组长度时,可通过
if语句校验索引范围,或使用动态数组(如ArrayList)。 - 类型不匹配:如用户输入字母但程序期望整数,用
try-catch捕获InputMismatchException或NumberFormatException,并提示用户重新输入。 - 空指针异常:若数组未初始化就使用,需检查数组是否为
null,避免NullPointerException。
示例(带异常处理的控制台输入):
import java.util.InputMismatchException;
import java.util.Scanner;
public class RobustInputArray {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] numbers = new int[3];
System.out.println("请输入3个整数:");
for (int i = 0; i < numbers.length; i++) {
while (true) {
try {
numbers[i] = scanner.nextInt();
break; // 输入正确则跳出循环
} catch (InputMismatchException e) {
System.out.print("输入类型错误,请重新输入第" + (i + 1) + "个整数:");
scanner.next(); // 清除错误的输入
}
}
}
System.out.print("输入的数组为:");
for (int num : numbers) {
System.out.print(num + " ");
}
scanner.close();
}
}
Java中将数据输入到数组的方法多样,需根据具体场景选择合适的方式:控制台输入适合交互式录入,文件输入适合批量数据处理,动态交互输入适合可变长度数据,命令行参数适合程序启动时的配置传递,无论哪种方式,都需注意异常处理和输入验证,确保代码的健壮性和可靠性,掌握这些方法后,开发者可以更灵活地应对数组数据输入的各种需求,提升Java程序的实用性和稳定性。


















