gpt4 book ai didi

Java while 循环行为

转载 作者:行者123 更新时间:2023-12-02 08:04:44 25 4
gpt4 key购买 nike

我遇到了一个问题,该问题是我为正在学习的 Java 类(class)编写的,并且我无法弄清楚为什么它会以某种方式运行。这是书中的问题,包括 A 部分和 B 部分:

A) 创建一个名为Purchase 的类。每次购买都包含发票号码、销售金额和销售税金额。包括发票号码和销售额的设置方法。在销售额的 set() 方法中,将销售税计算为销售额的 5%。还包括显示购买详细信息的显示方法。将文件另存为Purchase.java

B) 创建一个应用程序,声明一个购买对象并提示用户输入购买详细信息。当您提示输入发票编号时,不要让用户继续操作,直到输入 1000 到 8000 之间的数字。当您提示输入销售金额时,请在用户输入非负数、销售金额和销售税后继续操作。将文件另存为 CreatePurchase.java。

这是问题第一部分的代码:

public class Purchase
{

int invoiceNumber = 1234;
double salePrice = 10.00;
double SalesTax;

public void setInvoiceNumber(int invoice)
{
invoiceNumber = invoice;
}

public void setSalePrice(double saleAmount)
{
salePrice = saleAmount;
SalesTax = (saleAmount * .05);
}

public void displaySalePrice()
{
System.out.println("Your invoice number is:" + invoiceNumber + ".");
System.out.println("Your sale amount is: " + salePrice + ".");
System.out.println("Your sales tax is: " + SalesTax + ".");
}

}

这是问题第二部分的代码:

import java.util.Scanner;

public class CreatePurchase
{
public static void main(String[] args)
{

int invoice;
double saleAmount;
invoice = 0;
saleAmount = 0.0;
Purchase completedPurchase = new Purchase();

Scanner input = new Scanner(System.in);
System.out.println("Please enter the invoice number: ");
invoice = input.nextInt();
System.out.println("Please enter the sale amount: ");
saleAmount = input.nextDouble();

do
{
System.out.println("You entered an invalid number.");
System.out.println("Please enter a number between 1000 and 8000.");
invoice = input.nextInt();
}
while (invoice < 1000 || invoice > 8000);

do
{
System.out.println("You entered an invalid number.");
System.out.println("Please enter a number greater than 0.");
saleAmount = input.nextDouble();
}
while (saleAmount < 0);

completedPurchase.setInvoiceNumber(invoice);
completedPurchase.setSalePrice(saleAmount);

completedPurchase.displaySalePrice();
}
}

当我编译 CreatePurchase.java 并运行它时,它可以工作,但必须先循环一遍循环才能工作。例如,我将输入 7000 作为发票金额,并输入 100 作为销售金额。这两个值应自动调用 completePurchase.displaySalePrice(); 方法,因为发票编号大于 1000 且小于 8000,并且销售金额大于0。既然如此,在调用该方法之前,它仍然会循环执行一次 do while 循环。

我一生都无法弄清楚这一点。我可能缺少一些非常简单的东西。任何帮助将不胜感激。

经过下面大家的大力指导,我将循环代码更改为以下内容:

while (invoice < 1000 || invoice > 8000)
{
System.out.println("You entered an invalid number.");
System.out.println("Please enter a number between 1000 and 8000.");
invoice = input.nextInt();
}

while (saleAmount < 0)
{
System.out.println("You entered an invalid number.");
System.out.println("Please enter a number greater than 0.");
saleAmount = input.nextDouble();
}

它仍然无法正常工作。将循环更改为 while 循环确实有效,但现在当我输入正确范围内的发票编号数字和不正确的 saleAmount 数字时,程序完成并且不会执行 saleAmount 的 while 循环?我在这里似乎缺少一个概念。

另外,谁能推荐一个比 JGrasp 更好的 IDE。这就是我们被告知要使用的方法,但它很麻烦。我有 VisualStudio 和 Eclipse,但我觉得在这两个 IDE 中做 java 作业可能有点过头了。我将学习更多的 java 类(class)和 c++ 类(class),所以也许值得学习 VS 或 Eclipse 的基础知识。如有任何建议,我们将不胜感激。

最佳答案

这是因为 do block 总是被执行至少一次。您应该使用 while 循环来代替:

while (invoice < 1000 || invoice > 8000)
{
System.out.println("You entered an invalid number.");
System.out.println("Please enter a number between 1000 and 8000.");
invoice = input.nextInt();
}

这样,如果发票号码不在您定义的范围内,您只需要求另一个号码。

关于Java while 循环行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8363622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com