我创建了两个类,当我输入负数和负价时,它没有设置为" 0"和" 0.0"分别为我在 setitmprch(int itmprch)和 setitmprch(int itmprch)方法中指定条件。请告诉我哪里犯了错误。
public class INVOICE {
private String pn;
private String pdscp;
private int itmprch;
private double prpitm;
private double amount;
public INVOICE(String pn, String pdscp, int itmprch, double prpitm ){
this.pn=pn;
this.pdscp=pdscp;
this.itmprch=itmprch;
this.prpitm=prpitm;
}
public void setpn(String pn){
this.pn=pn;
}
public void setpdscp(String pdscp){
this.pdscp=pdscp;
}
public void setitmprch(int itmprch){
if (itmprch < 0)
itmprch=0;
}
public void setprpitm(double prpitm){
if(prpitm > 0.0)
this.prpitm=prpitm;
else if(prpitm < 0.0)
this.prpitm=0.0;
}
public String getpn(){
return pn;
}
public String getpdscp(){
return pdscp;
}
public int getitmprch(){
return itmprch;
}
public double getprpitm(){
return prpitm;
}
public double getInvoiceAmount(){
amount= getitmprch()*getprpitm();
return amount;
}
}
public class INVOICETEST {
public static void main(String[] args) {
// TODO code application logic here
INVOICE in= new INVOICE("Mercedez","Arw 777",-3,-2.0);
System.out.printf("Part number is: %s\n",in.getpn());
System.out.printf("Part decription is: %s\n", in.getpdscp());
System.out.printf("Item purchased: %s\n",in.getitmprch());
System.out.printf("Price per item is: %s\n",in.getprpitm());
System.out.printf("Total amount is: %s\n",in.getInvoiceAmount());
}
}
答案 0 :(得分:3)
您正在为方法参数指定值,一旦退出方法,这些值就会丢失。将this.itmprch = itmprch
添加到您的setitmprch
方法中。另请参阅一些Java编程指南以提高代码可读性。
public void setitmprch(int itmprch){
if (itmprch < 0)
itmprch=0;
this.itmprch = itmprch;
}
您的构造函数也应该调用setter方法而不是直接赋值。它看起来像这样:
public INVOICE(String pn, String pdscp, int itmprch, double prpitm ){
setpn(pn);
setpdscp(pdscp);
setitmprch(itmprch);
setprpitm(prpitm);
}
答案 1 :(得分:0)
请勿对课程名称使用全部大写字母。
使用更具描述性的变量名称 - 我的眼睛正在流泪看着它,理解它需要的时间比它应该长10倍。
使用自动属性而不是使用私有支持字段和void方法来设置/获取。
使用属性进行简单计算,例如计算发票金额。
不要设置私有变量然后返回所述变量。
使用单元测试来测试逻辑而不是主方法。当代码增长时会发生什么,如何使用一个入口点来测试它?
不要将in
等受保护关键字用于变量名称(在主函数中)。
以下代码在C#中,但它应该可以轻松转录为Java。对Java的单元测试框架进行一些研究,并尝试将其整合到您的工作流程中。
public class Invoice
{
public string ModelName { get; set; }
public double Price { get; set; }
public double Amount { get; set; }
public double InvoiceAmount => Price * Amount;
}
[TestClass]
public class InvoiceTest
{
[TestMethod]
public void TestInvoiceAmount()
{
// Arrange
var testInvoice = new Invoice()
{
ModelName = "Audi R8",
Price = 5000.0,
Amount = 1
};
// Act
double invoiceAmount = testInvoice.InvoiceAmount;
// Assert
Assert.IsTrue(invoiceAmount == 5000.0);
}
}