Я создал два класса, когда я ввел отрицательное количество и отрицательную цену, оно не должно быть "0" и "0.0"

Я создал два класса, когда я ввел отрицательное количество и отрицательную цену, они не устанавливаются как "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());


}

}

2 ответа

Вы присваиваете значения параметрам метода, которые будут потеряны при выходе из метода. добавлять this.itmprch = itmprch на ваш setitmprch метод. Также ознакомьтесь с некоторыми рекомендациями по программированию на Java для улучшения читабельности кода.

public void setitmprch(int itmprch){
    if (itmprch < 0)
        itmprch=0;
    this.itmprch = itmprch;
}

Также ваш конструктор должен вызывать методы установки вместо непосредственного присвоения значений. Это будет выглядеть примерно так:

public INVOICE(String pn, String pdscp, int itmprch, double prpitm ){
    setpn(pn);
    setpdscp(pdscp);
    setitmprch(itmprch);
    setprpitm(prpitm);
}

Не используйте все заглавные буквы для имен классов.

Используйте более описательные имена переменных - мои глаза кровоточат, глядя на это, и для понимания требуется в 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);
    }
}
Другие вопросы по тегам