Java数组分类程序输出异常,如何修复?
问题修复:Java数组分类存储重复最后元素的问题
问题根源
你遇到的问题是没有为每个分类数组维护独立的索引指针——每次给数组赋值时都覆盖了同一个位置,导致最终所有元素都是该类别最后输入的数值。比如负数数组每次都赋值给negativeList[0],最后所有位置都会被最后输入的-4覆盖。
修复方案
核心思路是为每个数组设置独立的索引计数器,每存入一个元素就将对应索引自增,确保每个元素存在数组的不同位置。同时先统计各类数的数量,再初始化对应长度的数组,避免空间浪费。
完整修复代码
import java.util.Scanner; public class NumberClassifier { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int[] inputNumbers = new int[10]; // 第一步:接收10个用户输入 for (int i = 0; i < 10; i++) { System.out.print("请输入第" + (i + 1) + "个整数:"); inputNumbers[i] = scanner.nextInt(); } // 统计三类数的数量,用于初始化对应数组长度 int evenCount = 0, oddCount = 0, negativeCount = 0; for (int num : inputNumbers) { if (num > 0) { if (num % 2 == 0) { evenCount++; } else { oddCount++; } } else if (num < 0) { negativeCount++; } // 注:需求未提及0的处理,此处直接忽略 } // 初始化三个分类数组 int[] evenList = new int[evenCount]; int[] oddList = new int[oddCount]; int[] negativeList = new int[negativeCount]; // 为每个数组设置独立的索引计数器 int evenIdx = 0, oddIdx = 0, negativeIdx = 0; // 遍历输入,分类存入对应数组 for (int num : inputNumbers) { if (num > 0) { if (num % 2 == 0) { evenList[evenIdx++] = num; // 赋值后索引自增 } else { oddList[oddIdx++] = num; } } else if (num < 0) { negativeList[negativeIdx++] = num; } } // 输出结果 System.out.println("\n正偶数数组:"); for (int num : evenList) { System.out.print(num + " "); } System.out.println("\n正奇数数组:"); for (int num : oddList) { System.out.print(num + " "); } System.out.println("\n负数数组:"); for (int num : negativeList) { System.out.print(num + " "); } scanner.close(); } }
关键修复点
- 独立索引计数器:
evenIdx、oddIdx、negativeIdx三个变量分别跟踪对应数组的当前存储位置,每次赋值后自动自增,确保每个元素存入新的位置。 - 先统计再初始化:先遍历输入统计各类数的数量,再创建对应长度的数组,避免数组空间浪费或不足。
- 分阶段处理:先接收所有输入再分类存储,逻辑更清晰,也避免了边输入边统计可能出现的混乱。
测试验证
输入1,2,3,4,5,6,-1,-2,-3,-4时,输出结果如下:
正偶数数组: 2 4 6 正奇数数组: 1 3 5 负数数组: -1 -2 -3 -4
内容的提问来源于stack exchange,提问作者nathalier
相关产品推荐
相关产品推荐

