Java数组索引奇偶分组求和比较代码错误排查
代码问题排查
你的代码存在4个核心问题,都会导致运行结果不符合预期:
- 求和变量作用域错误:
sum1、sum2被声明在for循环内部,每次执行循环体都会把两个变量重置为0,最终只能累加当前读入的单个元素值,根本无法得到全部分组的总和。 - 结果判断逻辑位置错误:你把总和对比、打印结果的代码写在了循环内部,会导致每输入一个数就打印一次对比结果,而不是等15个数字全部输入完成后输出最终对比结论。
- 冗余逻辑:奇偶判断中
else if (i % 2 != 0)属于多余判断,对整数来说,模2等于0和不等于0是完全互斥的两种情况,直接用else即可。 - 语法与冗余声明问题:
main方法上声明了throws IOException但全程没有使用IO流相关操作,属于无效声明;原代码括号闭合位置错误,会直接触发编译失败。
修正后可正常运行的代码
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] numOfPeople = new int[15]; // 求和变量声明在循环外,仅初始化一次,用于全程累加 int evenIndexSum = 0; int oddIndexSum = 0; for (int i = 0; i < numOfPeople.length; i++) { numOfPeople[i] = scanner.nextInt(); // 按当前索引的奇偶性分组累加 if (i % 2 == 0) { evenIndexSum += numOfPeople[i]; } else { oddIndexSum += numOfPeople[i]; } } // 所有数据读取、累加完成后,仅做一次最终对比输出 if (evenIndexSum > oddIndexSum) { System.out.println("В домах с четными номерами проживает больше жителей."); } else if (evenIndexSum < oddIndexSum) { System.out.println("В домах с нечетными номерами проживает больше жителей."); } else { System.out.println("Количество жителей в домах с четными и нечетными номерами одинаковое."); } } }
补充说明:Java数组默认从索引0开始计数,如果你实际业务里的门牌号是从1开始编号(即第一个元素对应1号奇数门牌号),只需要把累加逻辑里的奇偶判断互换即可。
内容的提问来源于stack exchange,提问作者TheRedBaron43
相关产品推荐
相关产品推荐

