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

如何比较ArrayList中的原始整数?输入存储及get方法报错求助

搞定ArrayList.get()报错与整数元素比较的问题

嘿,看来你在用Scanner收集输入到ArrayList时,遇到了get(int index)报错的问题,还想知道怎么正确比较里面的整数元素,我来帮你一步步理清楚!

一、为啥ArrayList.get()会报错?

最常见的就是IndexOutOfBoundsException,大概率是踩中了这几个坑:

  • 索引越界:ArrayList的索引是从0开始的,最大有效索引是list.size() - 1,要是你循环写了i <= list.size(),或者直接硬写了一个超过列表长度的索引,肯定会炸。
  • 空列表就访问:刚初始化完ArrayList,还没通过Scanner存任何元素就去get(0),这不报错才怪。
  • 迭代时的操作失误:比如用Iterator遍历的时候同时修改了列表,或者迭代逻辑写错了。

给你一个正确的Scanner输入存ArrayList的示例,避开这些坑:

package BubbleSort;
import java.util.ArrayList;
import java.util.Scanner;

public class InputHandler {
    public static void main(String[] args) {
        ArrayList<Integer> numList = new ArrayList<>();
        Scanner scanner = new Scanner(System.in);
        
        System.out.println("请输入整数,输入非整数(比如字母)结束输入:");
        // 循环读取整数直到输入非整数
        while (scanner.hasNextInt()) {
            numList.add(scanner.nextInt());
        }
        scanner.close();
        
        // 先判断列表非空再访问元素
        if (!numList.isEmpty()) {
            // 正确访问第一个元素(索引从0开始)
            int firstNumber = numList.get(0);
            System.out.println("你输入的第一个数是:" + firstNumber);
        } else {
            System.out.println("你啥整数都没输入哦!");
        }
    }
}

二、怎么比较ArrayList里的整数元素?

要注意:ArrayList里存的是Integer(int的包装类,不是原始int类型),直接用==有时候会踩坑,给你几种靠谱的方式:

1. 用equals()方法(最稳妥)

这是专门用来比较Integer对象数值的方法,完全不用担心缓存问题:

Integer num1 = numList.get(0);
Integer num2 = numList.get(1);
if (num1.equals(num2)) {
    System.out.println("这两个数相等!");
}

要是怕其中一个元素是null(不过你用Scanner存的话不会出现空值),可以先判空:

if (num1 != null && num1.equals(num2)) {
    // 执行你的逻辑
}

2. 拆箱成int后用==比较

Java会自动把Integer拆箱成原始int,这时候==比较的是数值:

int val1 = numList.get(0);
int val2 = numList.get(1);
if (val1 == val2) {
    System.out.println("两个数相等");
}

小提醒:如果Integer的数值超出了-128到127的缓存范围,直接用Integer对象比==会比较引用而不是数值,这就会出问题,所以拆箱后再用==更安全。

3. 用compareTo()判断大小关系

如果需要知道谁大谁小,用compareTo()最方便:

int compareResult = numList.get(0).compareTo(numList.get(1));
if (compareResult == 0) {
    System.out.println("两个数相等");
} else if (compareResult > 0) {
    System.out.println("第一个数比第二个数大");
} else {
    System.out.println("第一个数比第二个数小");
}

最后再划个重点

  • 排查get()报错:先确认ArrayList不是空的,再检查索引是不是在0到list.size()-1之间。
  • 比较整数元素:优先用equals()或者compareTo(),避免因Integer缓存导致的==判断错误。

内容的提问来源于stack exchange,提问作者Srinath Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:08:33