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

Java捐赠计算程序调试:循环计数异常问题求助

修正Java捐赠盈亏计算程序的循环逻辑

核心需求回顾:

  • 先输入蛋糕生产成本(小数)、捐赠人数(整数)
  • 依次输入每人的捐赠额(小数),累计计算总额
  • 累计总额≥成本时,立即输出--- Gewinnzone ---并停止接收后续捐赠
  • 若所有捐赠输入完成后总额仍小于成本,输出Verlust

原代码的核心问题除了计数器未递增,还有满足盈利条件后未及时终止循环,导致继续等待输入,进而引发超时或输出错误。

以下是修正后的完整代码:

import java.util.Scanner;

public class SpendeBerechnung {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // 读取生产成本和捐赠人数
        double kosten = scanner.nextDouble();
        int anzahlAbnehmer = scanner.nextInt();
        
        double gesamtSpende = 0.0;
        int spendenAnzahl = 0;
        boolean erreichtGewinnzone = false;
        
        while (spendenAnzahl < anzahlAbnehmer) {
            double spende = scanner.nextDouble();
            gesamtSpende += spende;
            spendenAnzahl++; // 计数器递增,避免无限循环
            
            // 检查是否达到盈利条件
            if (gesamtSpende >= kosten) {
                System.out.println("--- Gewinnzone ---");
                erreichtGewinnzone = true;
                break; // 立即终止循环,不再接收后续捐赠
            }
        }
        
        // 循环结束后,若未触发盈利条件则输出Verlust
        if (!erreichtGewinnzone) {
            System.out.println("Verlust");
        }
        
        scanner.close();
    }
}

关键修正点说明:

  • 计数器递增:在每次读取捐赠额后执行spendenAnzahl++,确保循环能正常终止
  • 提前终止循环:当累计捐赠达到或超过成本时,通过break跳出循环,避免继续等待输入导致超时
  • 状态标记:用erreichtGewinnzone标记是否触发过盈利输出,避免循环结束后重复判断或错误输出
  • 输入处理:使用Scanner的nextDouble()和nextInt()正确读取对应类型的输入,避免类型不匹配问题

测试场景验证:

  1. 成本100,捐赠人数3,依次输入40、50、20:累计到90时未达标,输入20后累计110≥100,输出--- Gewinnzone ---并终止
  2. 成本200,捐赠人数3,依次输入50、60、70:累计180<200,循环结束后输出Verlust

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 01:42:08