
本文详解如何在java中接收15个整数、使用冒泡排序升序排列后,准确分离偶数和奇数到两个独立数组,并避免因遍历未填充索引导致的“0”值干扰输出。
本文详解如何在java中接收15个整数、使用冒泡排序升序排列后,准确分离偶数和奇数到两个独立数组,并避免因遍历未填充索引导致的“0”值干扰输出。
在处理数组分类任务时,一个常见错误是:为偶数/奇数数组预先分配固定长度(如 new int[15]),却在输出时仍遍历整个数组长度——这会导致未赋值位置默认显示 0(Java中int数组初始化值为0),从而污染输出结果。正确做法是仅遍历实际写入的有效元素个数,即利用计数器(evenCount 和 oddCount)控制输出范围。
以下是修正后的完整可运行代码,已整合输入、冒泡排序、分离逻辑与精准输出:
import java.util.Scanner;
class Assignment10 {
public static void main() {
Scanner sc = new Scanner(System.in);
int[] arr = new int[15];
System.out.println("Enter 15 numbers:");
for (int i = 0; i < arr.length; i++) {
arr[i] = sc.nextInt();
}
// Bubble Sort (ascending order)
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) { // 优化:每轮末位已就位
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
// Count evens and odds first (optional, but clarifies intent)
int evenCount = 0, oddCount = 0;
for (int num : arr) {
if (num % 2 == 0) evenCount++;
else oddCount++;
}
// Initialize result arrays with exact required sizes
int[] even = new int[evenCount];
int[] odd = new int[oddCount];
// Populate even and odd arrays
int eIdx = 0, oIdx = 0;
for (int num : arr) {
if (num % 2 == 0) {
even[eIdx++] = num;
} else {
odd[oIdx++] = num;
}
}
// Display results with clear labels
System.out.print("Original array: ");
for (int i = 0; i < 15; i++) {
System.out.print((i == 0 ? "" : " ") + arr[i]);
}
System.out.println();
System.out.print("Even array: ");
for (int i = 0; i < even.length; i++) {
System.out.print((i == 0 ? "" : " ") + even[i]);
}
System.out.println();
System.out.print("Odd array: ");
for (int i = 0; i < odd.length; i++) {
System.out.print((i == 0 ? "" : " ") + odd[i]);
}
System.out.println();
}
}✅ 关键改进说明:
-
动态数组尺寸:先统计偶/奇数个数,再创建对应长度的数组,彻底规避冗余
0; -
冒泡排序优化:内层循环上限设为
arr.length - 1 - i,减少无效比较; -
输出健壮性:使用
even.length/odd.length(即evenCount/oddCount)作为循环边界,确保只打印有效数据; - 格式清晰:各数组输出前添加明确标签,数字间空格分隔,首项不带前置空格,符合示例预期。
⚠️ 注意事项:
- Java中
int数组默认初始化为0,因此必须严格限制输出范围,否则0会被误认为有效数据; - 若需支持负数,
%运算符在Java中对负数仍满足a % 2 == 0判断偶数(如-4 % 2 == 0),逻辑无需修改; - 本方案时间复杂度为 O(n²)(排序主导),空间复杂度 O(n),适用于小规模教学场景。
通过以上结构化实现,你不仅能解决“输出0值”的问题,更能建立对数组容量管理、边界控制及代码可读性的工程化认知。

















