Java中查找数组重复元素时触发ArrayIndexOutOfBoundsException问题
解决Java数组查找重复元素时的ArrayIndexOutOfBoundsException异常
你遇到的java.lang.ArrayIndexOutOfBoundsException是因为循环中数组索引越界了,咱们来一步步分析问题并修正:
问题根源
先看你代码里的循环逻辑:
for (int i = 1; i < arr.length; i++) { if (arr[i] == arr[i + 1]) { System.out.println("Duplicate element from teh given array is = " + arr[i]); } }
数组的有效索引范围是从0到arr.length - 1,当i循环到arr.length - 1(也就是数组最后一个元素的索引)时,i + 1就等于arr.length,这时候访问arr[i+1]就超出了数组的边界,直接触发越界异常。
另外代码里还有个小拼写错误:teh应该改成the。
修正后的完整代码
import java.util.Arrays; public class FindDuplicateNumberInArray { public static void main(String[] args) { int arr[] = { 11, 24, 65, 1, 111, 25, 58, 95, 24, 37 }; Arrays.sort(arr); String sortedArray = Arrays.toString(arr); System.out.println(sortedArray); // 调整循环条件为i < arr.length - 1,确保i+1不会越界 // 同时将起始索引改为0,避免漏掉开头元素的重复检查 for (int i = 0; i < arr.length - 1; i++) { if (arr[i] == arr[i + 1]) { System.out.println("Duplicate element from the given array is = " + arr[i]); } } } }
额外说明
把循环起始索引从1改成0是更合理的选择:排序后的数组需要从第一个元素开始,依次比较相邻的两个元素,原来的写法会跳过第一个和第二个元素的对比,万一数组开头存在重复项就会被遗漏。
内容的提问来源于stack exchange,提问作者Madhur Palsokar
相关产品推荐
相关产品推荐

