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
相关产品推荐
相关产品推荐

