如何使用java.util.Scanner读取输入的数值范围(二元int数组)
问题原因
你现有代码存在三个核心问题:
- 语法错误:for循环缺少左大括号,编译无法通过
- 调用
input.nextInt()读取输入个数后,输入缓冲区残留了换行符,第一次执行input.nextLine()会直接读取到空字符串,无法正常拿到第一组范围值 - 缺少将读取到的范围字符串解析为int数组的逻辑,也没有对应的存储结构保存多组范围
实现代码
这里提供两种常见实现方案:
方案1:直接连续读取int值(无需处理换行,逻辑更简单)
import java.util.ArrayList; import java.util.Scanner; public class RangeReader { public static void main(String[] args) { Scanner input = new Scanner(System.in); // 读取范围个数 int number = input.nextInt(); // 用集合存储所有范围数组 ArrayList<int[]> rangeList = new ArrayList<>(); for(int i=0;i<number;i++){ // 每组范围连续读两个int即可,scanner会自动跳过空格、换行等空白符 int low = input.nextInt(); int high = input.nextInt(); rangeList.add(new int[]{low, high}); } input.close(); // 测试输出验证结果 for (int[] range : rangeList) { System.out.println("范围:" + range[0] + " " + range[1]); } } }
方案2:读整行后拆分解析(适合需要校验每行格式的场景)
import java.util.ArrayList; import java.util.Scanner; public class RangeReader { public static void main(String[] args) { Scanner input = new Scanner(System.in); int number = input.nextInt(); // 读完个数后主动读掉残留的换行符 input.nextLine(); ArrayList<int[]> rangeList = new ArrayList<>(); for(int i=0;i<number;i++){ String line = input.nextLine(); // 按空格拆分字符串为两个数值字符串,自动兼容多空格场景 String[] parts = line.trim().split("\\s+"); int low = Integer.parseInt(parts[0]); int high = Integer.parseInt(parts[1]); rangeList.add(new int[]{low, high}); } input.close(); // 测试输出验证结果 for (int[] range : rangeList) { System.out.println("范围:" + range[0] + " " + range[1]); } } }
注意事项
- 如果需要处理非法输入的场景,可以在解析数值的位置加
try-catch捕获NumberFormatException,或者用hasNextInt()做前置校验 - 以上代码默认输入的每组范围符合你给出的示例格式,若有大小值顺序、范围边界等要求,可自行补充判断逻辑
内容的提问来源于stack exchange,提问作者Dragos Laic
相关产品推荐
相关产品推荐

