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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:35:18