正数乘积计算方法代码故障排查:忽略负数遇零终止功能异常
问题分析与解决方案
首先先明确你的需求:计算输入数据集合的乘积,忽略所有负数,遇到零值时终止。你的代码目前能识别负数并打印提示,但乘积计算完全不符合预期,核心问题出在这几个地方:
1. 乘积初始值设置错误
你把temp的初始值设为0,但乘法的初始基准值应该是1(任何数乘以1都等于自身,而乘以0会直接让结果永远归零),这是导致乘积计算错误的最关键原因。
2. 多余分号破坏了判断逻辑
在else if (input>0);这一行末尾多了个分号,这会让这个条件判断的逻辑块变成空语句,后面的{ temp = input * temp; }会无条件执行——也就是说,哪怕是负数,在打印"ignored"之后依然会被乘进temp里,完全违背了“忽略负数”的需求。
3. 退出方式不够优雅
当第一个输入就是0时,你用System.exit(1)直接终止整个程序,如果这个方法是菜单的一部分,会导致菜单也跟着关闭。换成return结束方法会更合理。
修正后的完整代码
public void prodNoNegative () throws IOException { float input = 0; float temp = 1; // 修正:将乘积初始值改为1 String s; System.out.println("\n\nEnter a string of numbers followed by 0 to exit"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String line = br.readLine(); StringTokenizer st = new StringTokenizer(line); // 新增:处理空输入的情况,避免抛出异常 if (!st.hasMoreTokens()) { System.out.println("No input provided."); return; } input = Float.parseFloat(st.nextToken()); if (input == 0) { System.out.print("END"); return; // 用return替代System.exit,仅结束当前方法 } while (input != 0) { if (input < 0) { System.out.println(input + " is ignored."); } else if (input > 0) { // 去掉末尾多余的分号,让逻辑块生效 temp = input * temp; } // 新增:判断是否还有输入,避免无数据时抛出异常 if (!st.hasMoreTokens()) { break; } input = Float.parseFloat(st.nextToken()); } s = Float.toString(temp); System.out.println("The product of all positive inputs is " + s); }
额外优化说明
我还新增了两处异常判断:
- 处理用户未输入任何数据的情况,避免
st.nextToken()抛出NoSuchElementException - 在循环内判断是否还有剩余输入,防止用户没输入0就结束输入时抛出异常
这样代码的健壮性也得到了提升。
内容的提问来源于stack exchange,提问作者Julie.D
相关产品推荐
相关产品推荐

