如何在ArrayList中通过用户输入指定值范围并提取子列表(仅main方法实现)
解决方案
直接修改原代码的后半段输出逻辑即可实现需求,具体调整如下:
- 输入终止后,重新通过Scanner获取用户指定的起始值和结束值
- 定位这两个值在ArrayList中的对应索引
- 利用ArrayList的
subList()方法截取包含起始值到结束值的子列表并输出
修改后的完整代码:
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner inputReader = new Scanner(System.in); ArrayList<Integer> listOfNumbers = new ArrayList<>(); int inputNumber; while (true) { inputNumber = Integer.valueOf(inputReader.nextLine()); if (inputNumber <= -1) { break; } else { listOfNumbers.add(inputNumber); } } // 获取起始值 System.out.print("From where? "); int fromNum = Integer.valueOf(inputReader.nextLine()); // 获取结束值 System.out.print("To where? "); int toNum = Integer.valueOf(inputReader.nextLine()); // 找到对应元素的索引 int startIndex = listOfNumbers.indexOf(fromNum); int endIndex = listOfNumbers.indexOf(toNum); // 截取子列表(subList为左闭右开,所以结束索引+1才能包含结束值) ArrayList<Integer> result = new ArrayList<>(listOfNumbers.subList(startIndex, endIndex + 1)); // 输出结果 System.out.println(result); } }
关键细节说明
- 原循环终止后
inputNumber的值是-1,必须重新读取用户输入的起始/结束值 indexOf()返回元素在列表中首次出现的索引,符合需求中用户知晓列表元素情况的前提subList()的第二个参数是不包含的边界索引,因此要给结束值的索引加1,才能确保结束值被包含在结果里- 将
subList()的结果转为新ArrayList是因为它本身是原列表的视图,转成独立集合避免后续原列表修改影响结果
内容的提问来源于stack exchange,提问作者belinyom
相关产品推荐
相关产品推荐

