从类中调用计算的变量
我在练习中遇到了一些问题,我想知道是否有人可以提供帮助。这里是问题:从类中调用计算的变量
创建一个名为Purchase的类。每笔采购都包含发票号码,销售金额和销售税金额。包括发票号码和销售金额的设置方法。在销售金额的set()方法中,将销售税计算为销售额的5%。还包括显示购买细节的显示方法。保存为Purchase.class b。创建一个声明一个Purchase对象并提示用户购买细节的应用程序。当您提示输入发票号码时,请勿让用户继续操作,直至输入介于1,000和8,000之间的数字。当您提示销售金额时,请不要继续,直到用户输入非负值。创建有效的购买对象后,显示对象的发票编号,销售额和销售税。
这是我为我的采购类
import javax.swing.JOptionPane;
import java.util.Scanner;
public class Purchase
{
//variables
public static int invoice;
public static double saleAmount;
public static double saleTax;
//get&set for Invoice
public void setInvoice(int x)
{
invoice = x;
}
public int getInvoice()
{
return invoice;
}
//get&set for saleAmount
public void setSaleAmount(double y)
{
saleTax = y * 0.05;
saleAmount = y;
}
public double getSaleAmount()
{
return saleAmount;
}
//get for saleTax
public double getSaleTax()
{
return saleTax;
}
//display method
public void display(int invoice, double saleAmount, double saleTax)
{
System.out.println("Invoice number: " + invoice + '\n' + "Sale's Amount: " + saleAmount + '\n' + "Sale's Tax: " + saleTax);
}
}
代码为CreatePurchase类的代码
import javax.swing.JOptionPane;
import java.util.Scanner;
public class CreatePurchase
{
public static void main(String[] args)
{
Purchase purchase1 = new Purchase();
//scanner for sales amount
Scanner inputDevice = new Scanner(System.in);
System.out.println("Please enter the sale amount: ");
Purchase.saleAmount = inputDevice.nextDouble();
//loop for saleAmount
while (Purchase.saleAmount < 1)
{
System.out.print('\n'+ "Error, your sale amount needs to be more than 0. Please enter a valid sale amount: >> ");
Purchase.saleAmount = inputDevice.nextDouble();
}
//scanner for invoice
System.out.println("Please enter an invoice number between 1000 and 8000: ");
Purchase.invoice = inputDevice.nextInt();
//loop for invoice
while (Purchase.invoice < 999 || Purchase.invoice > 8000)
{
System.out.print('\n'+ "Error, please enter a valid invoice number between 1000 and 8000: >> ");
Purchase.invoice = inputDevice.nextInt();
}
//display result
JOptionPane.showMessageDialog(null, "Your invoice number is " + Purchase.invoice + '\n'
+ "Your sale tax is: " + Purchase.saleTax + '\n'
+ "Your grand total is: " + Purchase.saleAmount);
}
}
正如你可以看到,当您运行的第二类中,saleAmount不包括额外5%的销售税和销售税仍然为0.可能是一件非常愚蠢的事情,但我不知道从哪里开始。
saleTax
通过setSaleAmount
方法计算。你永远不会调用这个方法,所以saleTax
从不计算。
相反的:
Purchase.saleAmount = inputDevice.nextDouble();
你可能想:
purchase1.setSaleAmount(inputDevice.nextDouble());
您可能还需要通过一些文字解释,和之间的静态和实例成员类和对象之间的区别阅读。但通过改变这一行代码,程序至少可以工作。
现在没有编制,错误调用: 符号:变量getSaleTax 位置:型购房的变量purchase1 CreatePurchase.java:46:错误:无法找到符号 \t \t + “你的总计是:” + purchase1.getSaleAmount); –
您需要像使用getSaleTax()而不是getSaleTax一样使用它。您试图将该函数用作错误的变量。 –
您正在将一种方法看作是一种属性。要调用一个方法,你必须使用括号'()' – Joni
发票的定义,saleAmount和saleTax为public static
打败了面向对象程序设计的目的。
它们应该是私有实例变量,您应该通过调用您创建的实例上的get和set方法来访问和修改它们(purchase1
)。否则,定义这些setter和getters是没有意义的,创建这个实例是没有意义的,你永远不会使用它。
谢谢伊兰,我试图使用这个实例,但我很漂亮,并且不是100%如何。现在好,非常感谢你! :d –
1)将您静态类变量为实例变量。
private int invoice;
private double saleAmount;
private double saleTax;
2)然后使用您的Purchase
对象的getter/setter
purchase1.setSaleAmount();
purchase1.getSaleAmount();
注:静态字段不识别对象实例。如果想要有多个Purchase
对象,您的变量应该是实例变量而不是类(静态)变量。
如果您打算为类属性设置getter和setter,那么您应该使属性为'private',以便在setter中进行任何计算必须进行计算,因为您无法直接在类之外设置属性 –