Java数组阈值输出异常:正确元素后多输出大量0的问题求助
问题分析与修复方案
问题根源
你的代码存在两个关键问题导致输出大量0:
- 数组长度冗余:初始化了固定长度为20的数组
int[] userValues = new int[20];,但实际仅给前numVals个元素赋值,Java中未赋值的int数组元素默认值为0。 - 遍历范围错误:输出方法
outputIntsLessThanOrEqualToThreshold的循环条件用了i < userValues.length,会遍历整个20长度的数组,未赋值的0因满足upperThreshold >= 0(比如阈值100)被输出,导致出现大量无关内容。
修复方案
方案1:动态创建对应长度的数组(更贴合需求)
根据用户输入的numVals动态创建数组,让数组长度和实际元素数量完全匹配,从根源避免冗余的0元素:
import java.util.Scanner; public class LabProgram { public static void getUserValues(int[] myArr, int arrSize, Scanner scnr){ for(int i=0; i< arrSize; i++){ myArr[i]=scnr.nextInt(); } } public static void outputIntsLessThanOrEqualToThreshold( int[] userValues, int userValsSize, int upperThreshold){ for(int i = 0; i<userValsSize; i++) { if(upperThreshold >=userValues[i]) { System.out.print(userValues[i]+ " "); } } } public static void main(String[] args) { Scanner scnr = new Scanner(System.in); int upperThreshold; int numVals; numVals = scnr.nextInt(); int[] userValues = new int[numVals]; // 按输入长度动态创建数组 getUserValues(userValues, numVals, scnr); upperThreshold = scnr.nextInt(); outputIntsLessThanOrEqualToThreshold(userValues, numVals, upperThreshold); } }
方案2:限制遍历范围(保留原数组长度)
如果不需要修改数组长度,只需调整输出方法的循环条件,仅遍历已赋值的前userValsSize个元素:
public static void outputIntsLessThanOrEqualToThreshold( int[] userValues, int userValsSize, int upperThreshold){ // 将循环条件从userValues.length改为userValsSize for(int i = 0; i<userValsSize; i++) { if(upperThreshold >=userValues[i]) { System.out.print(userValues[i]+ " "); } } }
验证效果
输入数组长度5,元素50、60、140、200、75,阈值100,两种方案都会输出50 60 75 ,完全符合预期。
内容的提问来源于stack exchange,提问作者Jackie Morataya
相关产品推荐
相关产品推荐

