我遇到的问题是我编写的Java课程,我无法弄清楚它为什么会以某种方式运行。这是本书的问题,A部分和B部分:
A)创建一个名为Purchase的类。每次购买都包含发票编号,销售金额和销售税金额。包括发票编号和销售金额的设置方法。在销售金额的set()方法中,将销售税计算为销售金额的5%。还包括显示购买详细信息的显示方法。将文件另存为Purchase.java
B)创建一个声明Purchase对象的应用程序,并提示用户购买详细信息。当您提示发票编号时,请不要让用户继续操作,直到输入介于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循环肯定有效,但是现在当我输入一个数字表示发票号码在正确的范围内并且salesAmount的编号不正确时,程序完成并且不执行saleAmount的while循环?我似乎在这里错过了一个概念。
此外,任何人都可以推荐比JGrasp更好的IDE。这就是我们被告知使用的东西,但它很麻烦。我有VisualStudio和Eclipse,但我觉得在这两个IDE中做java作业可能有些过分。我将学习更多的java课程和c ++课程,所以也许值得学习VS或Eclipse的基础知识。任何建议将不胜感激。
答案 0 :(得分:2)
这是因为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();
}
这样,您只需要另一个号码,如果 invoice
号码不在您定义的范围之内。
答案 1 :(得分:0)
这是怎么做的... while循环工作:正文执行一次,然后检查条件。改为使用普通的while循环。
答案 2 :(得分:0)
这是因为您使用的是do{ } while(...)
而不是while(...) { }
do do保证至少运行一次,然后继续循环。
如果初始条件为假,则永远不会运行。
答案 3 :(得分:0)
在do-while
循环中,在测试条件之前执行正文。您可能希望使用while
循环,在测试条件后执行主体。
我强烈建议您阅读与Sun while and do-while tutorial的区别。
答案 4 :(得分:0)
将您的循环更改为while
s
while (invoice < 1000 || invoice > 8000)
{
...
}
答案 5 :(得分:0)
当我编译CreatPurchase.java并运行它时,它可以正常工作,但必须在它工作之前先循环遍历循环。
那是因为你正在使用do...while
循环。 do...while
循环执行至少一次,并在执行循环体之后检查条件。
在这种情况下,您想要的是一个简单的while
循环,以便在执行循环体之前检查条件。即:
while (invoice < 1000 || invoice > 8000)
{
...
}
答案 6 :(得分:0)
Java中有几个循环函数,一个是do-while-loop,它总是执行一次,然后如果while-part为true则再次循环。
另一个,在这种情况下更好的是,while循环的工作方式相同但在第一个循环之前检查while-part。
查看tutorial
答案 7 :(得分:0)
您需要while (condition) {…}
循环。这样,只有条件为真时才会执行循环中的代码。在您的代码中,您有一个do … while(condition)
循环,循环内部将始终至少执行一次。
答案 8 :(得分:0)
import java.util.Scanner;
public class CreatePurchase {
public static void main(String[] args) {
int invoice;
double amount;
Purchase sale1 = new Purchase();
System.out.println("Enter invoice number between 1000 and 8000 >>");
Scanner input = new Scanner(System.in);
invoice = input.nextInt();
while (invoice < 1000 || invoice > 8000) {
System.out.println("You entered a wrong invoice number");
System.out.println("Enter invoice number between 1000 and 8000 >>");
invoice = input.nextInt();
}
System.out.println("Enter sales amount >>");
amount = input.nextDouble();
while (amount < 0) {
System.out.println("Enter number greater than 0 ");
System.out.println("Enter sales amount >>");
amount = input.nextDouble();
}
sale1.setInvoiceNumber(invoice);
sale1.setAmount(amount);
sale1.display();
}
}