在Java程序开发中,读取指定数量的整数输入是常见需求,使用Scanner配合while循环实现时,需要合理设计逻辑才能保证读取过程稳定,不会出现无限循环或者读取错误的情况。

基本实现思路
要实现读取指定数量的整数,核心逻辑分为两步:第一步先获取用户需要输入的整数总个数,第二步通过while循环按照总个数逐个读取整数。需要注意先明确循环终止条件,避免循环无法结束。
第一步:获取输入总数
首先创建Scanner对象,先读取一个整数作为后续需要读取的整数总数,这个数值将作为while循环的判断依据。
第二步:用while循环读取整数
定义一个计数器变量,每成功读取一个整数就自增1,当计数器等于输入总数时,终止while循环,这样就能保证只读取指定数量的整数。
完整代码示例
以下是完整的实现代码,包含输入读取、循环控制和资源释放的完整逻辑:
import java.util.Scanner;
public class ReadSpecifiedIntegers {
public static void main(String[] args) {
// 创建Scanner对象用于读取输入
Scanner scanner = new Scanner(System.in);
System.out.println("请输入需要读取的整数个数:");
// 先读取需要输入的整数总数
int totalCount = 0;
// 校验输入的总数是否为正整数
while (!scanner.hasNextInt()) {
System.out.println("输入错误,请输入一个正整数作为整数个数:");
scanner.next(); // 清除错误输入
}
totalCount = scanner.nextInt();
if (totalCount <= 0) {
System.out.println("整数个数必须大于0,程序退出");
scanner.close();
return;
}
// 定义计数器,记录已读取的整数数量
int currentCount = 0;
// 存储读取到的整数
int[] integers = new int[totalCount];
System.out.println("请输入" + totalCount + "个整数:");
// while循环读取指定数量的整数
while (currentCount < totalCount) {
// 校验当前输入是否为整数
if (scanner.hasNextInt()) {
integers[currentCount] = scanner.nextInt();
currentCount++;
} else {
System.out.println("输入错误,请输入一个整数:");
scanner.next(); // 清除非整数输入
}
}
// 输出读取到的所有整数
System.out.println("读取到的整数如下:");
for (int num : integers) {
System.out.print(num + " ");
}
// 关闭Scanner资源
scanner.close();
}
}
关键注意事项
- 循环终止条件要明确:必须使用计数器与输入总数比较作为while循环的判断条件,不要依赖其他不确定的条件,避免无限循环。
- 输入校验不能少:读取输入时需要判断输入内容是否为整数,避免用户输入非整数导致程序报错或者读取异常。
- 资源及时释放:使用完Scanner后需要调用
close()方法关闭资源,避免资源泄露。 - 错误输入清除:当用户输入不符合要求的内容时,需要调用
next()方法清除错误输入,否则会导致循环一直读取到错误内容,无法继续正常输入。
常见问题解答
为什么循环会一直等待输入?
如果没有做输入校验,当用户输入非整数时,Scanner的hasNextInt()会一直返回false,如果没有清除错误输入的逻辑,循环就会一直阻塞。需要在判断输入不是整数时调用scanner.next()清除错误内容。
读取完指定数量后还需要处理多余输入吗?
如果程序后续没有其他输入需求,读取完指定数量后可以直接关闭Scanner,不需要处理多余输入。如果后续还有输入需求,可以根据实际情况决定是否继续读取或者忽略多余内容。