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

Java数字比对代码触发ArrayIndexOutOfBoundsException:1的原因及修复方法

嘿,搞定这个数组越界异常!

异常为啥会出现?

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 这个报错其实很直白:你访问了数组里不存在的索引位置。Java数组的索引是从0开始算的,比如一个长度为1的数组,只有索引0能用,你非要去拿索引1的元素,系统当然会给你报错。

结合你比对数字各位的场景,大概率是这两种情况:

  • 你把两个数字转成数组/字符串后,它们的长度不一样(比如一个是两位数,一个是一位数),但你循环的时候用了较长那个的长度当边界,去遍历较短的那个。比如数字12转成数组长度是2,数字3转成数组长度是1,循环到第2次(索引1)时,短数组根本没这个位置,直接炸了。
  • 循环条件写错了!比如你用了i <= 数组长度而不是i < 数组长度,举个例子,数组长度是1的话,i <=1会让i取到0和1,索引1就超出范围了。

怎么修复?看这里!

针对你的需求,我给你整理了一套靠谱的修复思路,还有示例代码:

第一步:统一两个数字的位数

先把两个数字转成字符串,给较短的那个补上前导零,让它们长度一致。这样遍历的时候就不会出现一个数组已经到头了,另一个还在继续的情况。

第二步:把循环条件改对

一定要用i < 数组/字符串长度当循环终止条件,确保索引始终在0到“长度-1”的范围内,别越界。

第三步:优化统计逻辑(避免重复计数)

另外提个小细节:统计“值对但位置错”的情况时,要注意别重复计数(比如两个数字都有多个相同的数字),我在示例代码里加了简单的处理,把已经匹配过的字符替换成星号,避免重复算。

修复后的完整代码

public class NumberCompare {
    public static void main(String[] args) {
        int num1 = 123;
        int num2 = 32; // 比如这个数字比num1短,之前会触发异常

        // 转成字符串并补前导零,让两者长度一致
        String str1 = String.valueOf(num1);
        String str2 = String.valueOf(num2);
        int maxLength = Math.max(str1.length(), str2.length());
        
        // 用格式化补前导零
        str1 = String.format("%" + maxLength + "d", num1);
        str2 = String.format("%" + maxLength + "d", num2);

        int numOfPositives = 0;
        int numOfNegatives = 0;

        // 遍历每一位,索引从0到maxLength-1,绝对不会越界
        for (int i = 0; i < maxLength; i++) {
            char c1 = str1.charAt(i);
            char c2 = str2.charAt(i);

            if (c1 == c2) {
                // 位置和数字都对,加正面计数
                numOfPositives++;
            } else {
                // 检查当前数字是否在另一个数的其他位置存在
                if (str2.contains(String.valueOf(c1))) {
                    numOfNegatives++;
                    // 替换掉已匹配的字符,防止重复统计
                    str2 = str2.replaceFirst(String.valueOf(c1), "*");
                }
            }
        }

        System.out.println("位置和数字都正确的数量:" + numOfPositives);
        System.out.println("数字正确但位置错误的数量:" + numOfNegatives);
    }
}

额外的小建议

  • 以后访问数组或字符串索引前,先瞄一眼长度,确保索引在0 <= 索引 < 长度范围内。
  • 处理不同长度的内容时,先统一长度或者分别处理,别硬凑着遍历。
  • 虽然可以用try-catch抓异常,但最好从逻辑上避免它发生,这才是更专业的写法哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:00:38