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()正确读取对应类型的输入,避免类型不匹配问题
测试场景验证:
- 成本100,捐赠人数3,依次输入40、50、20:累计到90时未达标,输入20后累计110≥100,输出
--- Gewinnzone ---并终止 - 成本200,捐赠人数3,依次输入50、60、70:累计180<200,循环结束后输出
Verlust
内容的提问来源于stack exchange,提问作者Euler007
相关产品推荐
相关产品推荐

