提问人:Euler007 提问时间:11/7/2023 最后编辑:Scott HunterEuler007 更新时间:11/7/2023 访问量:72
Java 程序女巫应该计算收到的捐款金额 [已关闭]
Java programme witch should calculate the amount of donations received [closed]
问:
我们假设第 1 部分中烤制的蛋糕和其他菜肴被分发给一群人,以换取自愿捐赠。该方案应计算收到的捐款金额,并根据生产成本计算捐款的产出,无论捐款是盈利还是亏损。必须输入蛋糕的生产成本。
首先,应输入烘焙产生的生产成本(= Kosten)(以十进制数表示)和捐赠人数(= Anzahl der Abnhemer)。然后输入每人的捐款金额(=Spendenanzhal)(以小数形式显示)。
一旦当前捐款金额至少与基于上次输入的捐款的费用一样高,就会显示一条消息(参见示例)。在此之后可能会有进一步的捐款。如果没有盈利(即成本超过捐款总额),该计划应在最后显示“亏损”。
确保格式与示例完全对应。
例:
? Costs: 5.20
? Number of customers: 5
? Donation: 2.50
? Donation: 0.80
? Donation: 2.00
--- Profit zone ---
? Donation: 0.50
? Donation: 1.00
Total donations: 6.8
Example:
? Cost: 4.80
? Number of recipients: 3
? Donation: 0.5
? Donation: 1
? Donation: 0.20
Total donations: 1.7
Loss
我目前的代码是:
package einfprog;
public class Bsp02 {
public static void main(String[] args) {
// TODO: Implement.
// Teil 2
SavitchIn in = new SavitchIn();//Teil 2
System.out.print("? Kosten: ");
double kosten = in.readDouble();
System.out.print("? Anzahl der Abnehmer: ");
int anzahlAbnehmer = in.readInt();
// Gesamtspenden und Anzahl der Spenden
double gesamtspenden = in.readInt();
int spendenAnzahl = in.readInt();
boolean gewinnZoneErreicht = false;
// Eingabe der Spenden pro Person
while (true) {
System.out.print("? Spende: ");
double spende = in.readDouble();
gesamtspenden += spende;
if (!gewinnZoneErreicht && gesamtspenden >= kosten) {
gewinnZoneErreicht = true;
System.out.println("--- Gewinnzone ---");
}
// Wenn alle Personen gespendet haben
if (spendenAnzahl == anzahlAbnehmer) {
break;
}
}
System.out.println("Gesamtspenden: " + gesamtspenden);
// Prüfen, ob Gewinn oder Verlust erzielt wurde
if (gesamtspenden >= kosten) {
} else {
System.out.println("Verlust");
}
}
}
该程序通过测试进行测试(我不知道它到底要求什么)。目前我得到一个输出错误,我认为这是由于while循环造成的。
donateNumber 为 0,始终保持 0。因此,if 语句 donateNumber == numberofpurchasers 的条件永远不会导致 true(如果 numberofpurchasers != 0) 可变数量的捐赠目前没有增加 - 但我可以为此添加一个(在 while 循环中)?
spendenAnzahl++;
但是,如果没有另一个输出错误或超时,我无法让它工作 - 有人可以说明我如何解决这个问题吗?
非常感谢您的帮助!
答:
确保你所有的变量都与某事相关。我不是.由于您已经在循环块中添加了一个循环中断机制,因此使用while (true) {
while
if (spendenAnzahl == anzahlAbnehmer) { break; }
为什么不使用这个概念作为循环的条件,而不仅仅是使用你已经在发挥作用并稍微表达的变量
不同,类似于:while
true
while (donationCount < numberOfCustomers) {
然后在循环块中,在一开始,有 .现在你可以摆脱它了.while
donationCount++;
if (spendenAnzahl == anzahlAbnehmer) { break; }
将其付诸实践将如下所示(请务必阅读代码中的注释):
// Open a Keyboard input stream:
Scanner in = new Scanner(System.in);
// Get the Target Cost from User:
System.out.print("Required Target Cost? -> $");
double cost = in.nextDouble();
// Get the number of Customers that will be donating:
System.out.print("Number of Customers? -> ");
int numberOfCustomers = in.nextInt();
// Total donations and number of donations
double totalDonated = 0.0d; // Will hold the total sum of donations acquired.
int donationCount = 0; // Counter for number of donations processed.
boolean profitZoneReached = false; // Flag to indicate when in a donations profit state.
/* Enter donations per person. Iterate through
each Customer that will be donating. */
while (donationCount < numberOfCustomers) {
donationCount++;
System.out.print("Customer Donation #" + (donationCount) + "? -> $");
double donation = in.nextDouble();
totalDonated += donation; // Add the current donation to `totalDonated`:
/* If the profitZoneReached flag is false and the
total donated amount has surpassed or equals the
Cost then set the profitZoneReached flag to true
and display "--- Profit Zone ---". */
if (!profitZoneReached && totalDonated >= cost) {
profitZoneReached = true;
System.out.println("--- Profit Zone ---");
}
}
// Indicate the sum of donations formatted to two decimal places):
System.out.println("Total donations: -> $" + String.format("%.02f", totalDonated));
/* Check whether Target, Profit, or Loss was achieved:
All displayed values are formatted to two decimal
places. */
if (totalDonated == cost) {
System.out.println("On Cost Target of -> $" + String.format("%.02f", cost) + " :)");
}
else if (totalDonated > cost) {
System.out.println("At a Profit of -> $" +
String.format("%.02f", (totalDonated - cost)) + " :D");
}
else {
System.out.println("At a Loss of -> $" + String.format("%.02f", (cost - totalDonated)) + " :(");
}
评论
while (true)
break
break
if (spendenAnzahl == anzahlAbnehmer) { break; }
(spendenAnzahl == anzahlAbnehmer)
return