You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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资源
    }
}

额外优化说明

  1. 把数组初始化为空数组new String[3],避免原代码中初始值干扰结果;
  2. 添加输入提示,让用户明确输入要求;
  3. 使用printf格式化百分比输出,保留两位小数,结果更直观;
  4. 最后关闭Scanner资源,避免资源泄漏。

内容的提问来源于stack exchange,提问作者Nick B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 10:34:50