Java数组内容无法更新求助:程序输出出现Infinity%
Java选举统计代码问题排查与修复
问题根源分析
你的代码出现数组未更新、输出Infinity的问题,是由三个关键错误导致的:
- 循环条件完全错误:第一个for循环的
i > 3永远不成立(初始i=0),循环体一次都没执行,所以party和pVotes数组始终保留初始值,totalVotes也一直是0,后续除法运算pVotes[y]/totalVotes就会出现除以0的情况,输出Infinity。 - 总票数累加逻辑错误:代码里
totalVotes = totalVotes = v;是直接把当前v赋值给totalVotes,而不是累加所有票数,即使循环执行,也会导致总票数错误。 - Scanner输入的换行残留问题:
nextFloat()读取数值后,输入缓冲区会留下换行符,下一次nextLine()会读取到空字符串,导致政党名称无法正确输入。
修正后的代码
import java.util.Scanner; public class ElectionStatistics { public static void main(String[] args) { Scanner input = new Scanner(System.in); String[] party = new String[3]; // 初始化空数组,避免默认值干扰 float[] pVotes = new float[3]; float totalVotes = 0; for (int i = 0; i < 3; i++) { System.out.print("请输入第" + (i+1) + "个政党名称:"); String p = input.nextLine(); party[i] = p; System.out.print("请输入该政党得票数:"); float v = input.nextFloat(); pVotes[i] = v; totalVotes += v; // 累加总票数 input.nextLine(); // 消费nextFloat()留下的换行符 } System.out.println("\n选举统计结果:"); for (int y = 0; y < party.length; y++) { float percentage = (pVotes[y] / totalVotes) * 100; // 转换为百分比格式 System.out.printf("%s received: %.2f%%\n", party[y], percentage); } input.close(); // 关闭Scanner资源 } }
额外优化说明
- 把数组初始化为空数组
new String[3],避免原代码中初始值干扰结果; - 添加输入提示,让用户明确输入要求;
- 使用
printf格式化百分比输出,保留两位小数,结果更直观; - 最后关闭Scanner资源,避免资源泄漏。
内容的提问来源于stack exchange,提问作者Nick B
相关产品推荐
相关产品推荐

