Java中如何仅显示3个数组的逻辑大小内容,消除打印的多余0.0
数组分类存储过滤默认空值解决方案
你现在需要将masterArray中的数值分类存入oddList(奇数数组)、negativeList(负数数组)、evenList(偶数数组)三个数组中,打印时要去掉未填充位置默认生成的0.0,只输出有效元素。首先你的原代码存在多处逻辑问题,需要先修复再处理空值过滤需求:
- 三个数组共用同一个
size计数变量,会导致存储位置完全混乱,无法正确分类 - 判断逻辑顺序错误:负数也可能是奇数或偶数,现有逻辑会把负奇数、负偶数误归类到奇偶分组,不会进入负数判断分支
- 冗余的嵌套for循环会导致同一元素被重复处理,
oddList写入时用索引z而非对应计数,存在下标越界风险 - 直接打印定长数组的全部内容,自然会显示未赋值位置的默认值
0.0
方案1:保留定长数组结构,打印时截取有效片段
为每个数组单独维护计数变量,打印时只截取从0到计数长度的有效元素,自动过滤后面的0.0:
import java.util.Arrays; public static void negoddeven(double masterArray[]){ // 每个数组单独维护计数,避免写入位置混乱 int oddSize = 0, negativeSize = 0, evenSize = 0; double[] negativeList = new double[10], oddList = new double[10], evenList = new double[10]; for(int z = 0; z < masterArray.length; z++){ double num = masterArray[z]; // 优先判断负数,避免负奇偶值被错误归类 if(num < 0){ if(negativeSize < negativeList.length){ negativeList[negativeSize] = num; negativeSize++; } } else if(num % 2 != 0){ if(oddSize < oddList.length){ oddList[oddSize] = num; oddSize++; } } else { if(evenSize < evenList.length){ evenList[evenSize] = num; evenSize++; } } } // 截取有效长度后打印,自动过滤尾部的0.0 System.out.print("\n奇数列表的有效元素为:" + Arrays.toString(Arrays.copyOf(oddList, oddSize))); System.out.print("\n负数列表的有效元素为:" + Arrays.toString(Arrays.copyOf(negativeList, negativeSize))); System.out.print("\n偶数列表的有效元素为:" + Arrays.toString(Arrays.copyOf(evenList, evenSize)) + "\n"); }
方案2:使用动态集合存储,无需手动处理长度
如果允许使用集合类,直接用ArrayList<Double>存储分类数据,会自动适配元素长度,不会生成多余默认值:
import java.util.ArrayList; public static void negoddeven(double masterArray[]){ ArrayList<Double> negativeList = new ArrayList<>(); ArrayList<Double> oddList = new ArrayList<>(); ArrayList<Double> evenList = new ArrayList<>(); for(double num : masterArray){ if(num < 0){ negativeList.add(num); } else if(num % 2 != 0){ oddList.add(num); } else { evenList.add(num); } } System.out.print("\n奇数列表的有效元素为:" + oddList); System.out.print("\n负数列表的有效元素为:" + negativeList); System.out.print("\n偶数列表的有效元素为:" + evenList + "\n"); }
内容的提问来源于stack exchange,提问作者Kevin
相关产品推荐
相关产品推荐

