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

Android Studio如何访问未知长度数组元素及解决数组越界异常

问题解答

错误原因

  • 下标越界直接诱因:内层循环的终止条件错误。长度为n的Java数组合法下标范围是0 ~ n-1,你写的for (int j = 1; j <= integersNumbers.length; j++)中,当j等于数组长度时访问integersNumbers[j]就会触发越界异常。
  • 逻辑错误:你当前的判断条件integersNumbers[j]%j == 0完全不符合公因数计算逻辑,你需要验证的是「当前候选因数i是否能整除数组第j位的元素」,而不是拿元素除以下标j。同时你没有做全量校验就直接往结果里追加内容,会输出大量无关数值。

修正后代码

StringBuilder sb = new StringBuilder();
String value = edtCommonFact.getText().toString();
String[] stringsNumber = value.split(",");
Integer[] integersNumbers = new Integer[stringsNumber.length];
for (int i = 0; i < stringsNumber.length; i++){
    integersNumbers[i] = Integer.parseInt(stringsNumber[i]);
}
Arrays.sort(integersNumbers);
// 遍历最小数的所有可能的因数
for (int i = 1; i <= integersNumbers[0]; i++){
    if (integersNumbers[0] % i == 0) {
        // 标记当前i是不是所有数的公因数
        boolean isCommonFactor = true;
        // 遍历剩下的所有数字验证是否能被i整除
        for (int j = 1; j < integersNumbers.length; j++){
            if (integersNumbers[j] % i != 0) {
                isCommonFactor = false;
                // 只要有一个不能整除就直接跳出循环
                break;
            }
        }
        // 确认是公因数再追加到结果
        if (isCommonFactor) {
            sb.append(i).append(" ");
        }
    }
}
String result = sb.toString();
commonFactResult.setText("Common factors are: " + result);

补充说明

如果要访问长度为n的数组元素,只要保证下标取值在0到n-1的闭区间内即可,不要超过这个范围。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:45:03