You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArrayList中通过用户输入指定值范围并提取子列表(仅main方法实现)

解决方案

直接修改原代码的后半段输出逻辑即可实现需求,具体调整如下:

  1. 输入终止后,重新通过Scanner获取用户指定的起始值和结束值
  2. 定位这两个值在ArrayList中的对应索引
  3. 利用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:05:20