如何比较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
相关产品推荐
相关产品推荐

