Java MinMax程序最值计算异常:结果始终出现0的问题求助
问题根源分析
你遇到的问题出在最小值和最大值的初始化逻辑上:
- Java中创建
long[]数组时,所有元素的默认值是0,你在解析输入参数之前就用measArray[0]初始化了lowestMeas和highestMeas,这两个变量一开始就被设成了0。 - 当所有输入参数都大于0时,
lowestMeas永远不会被更新(因为没有输入比0小),最终输出0;当所有输入都小于0时,highestMeas永远不会被更新(没有输入比0大),最终输出0。
修复方案
方案1:先解析第一个参数,再初始化极值
先把第一个输入参数解析到数组,再用这个值初始化lowestMeas和highestMeas,之后从第二个元素开始循环处理:
public class MinMax { public static void main(String[] args) throws Exception { if(args.length == 0){ System.out.println("ERROR: Bitte mindestens eine Zahl als Argument übergeben!"); return; } long[] measArray = new long[args.length]; // 先解析第一个元素 measArray[0] = Long.parseLong(args[0]); // 用第一个元素初始化极值 long lowestMeas = measArray[0]; long highestMeas = measArray[0]; // 从第二个元素开始循环 for(int i = 1; i < measArray.length; i++){ measArray[i] = Long.parseLong(args[i]); if(measArray[i] < lowestMeas){ lowestMeas = measArray[i]; } if(measArray[i] > highestMeas){ highestMeas = measArray[i]; } } System.out.println(lowestMeas); System.out.println(highestMeas); } }
方案2:省略数组(优化版)
如果不需要保存所有输入参数,直接用第一个参数解析后的值初始化极值,然后遍历剩余参数即可,还能节省内存:
public class MinMax { public static void main(String[] args) throws Exception { if(args.length == 0){ System.out.println("ERROR: Bitte mindestens eine Zahl als Argument übergeben!"); return; } long lowestMeas = Long.parseLong(args[0]); long highestMeas = lowestMeas; for(int i = 1; i < args.length; i++){ long current = Long.parseLong(args[i]); if(current < lowestMeas){ lowestMeas = current; } if(current > highestMeas){ highestMeas = current; } } System.out.println(lowestMeas); System.out.println(highestMeas); } }
测试验证
- 执行
java MinMax 2 3 2,输出2和3 - 执行
java MinMax -9 -3 -10 -1,输出-10和-1
内容的提问来源于stack exchange,提问作者ntimo
相关产品推荐
相关产品推荐

