Программа возвращает 0 после установки значения и вызова методов get?

Я работаю над проектом Java, насколько я могу сказать, я все это закончил, но когда я запускаю программу, первый набор кода в приложении делает то, что должен, но обновленные суммы дают мне 0 по цене и сумме. То же самое относится и к кодированию для второго объекта, оригинальная информация о счете-фактуре работает отлично, за исключением того факта, что кроме обновленного кода, она дает мне отрицательные значения, когда они должны быть равны нулю, кроме того, она работает нормально. для обновленных сумм счета, это дает мне 0 для цены и окончательной суммы. Я не вижу никаких ошибок, все это компилируется и запускается. Вот код класса.

public class Invoice
{
private String partNumber;
private String partDescription;
private int quantity;
private double price;

public Invoice (String part,String description, int quan, double value)
{
    partNumber = part;
    partDescription = description;

    if(quan > 0);
        quantity = quan;

    if(price > 0.0);
        price = value;

}
public void setpartNumber(String part)
{
    partNumber = part;
}
public String getpartNumber()
{
    return partNumber;
}
public void setpartDescription(String description)
{
    partDescription = description;      
}
public String getpartDescription()
{
    return partDescription;
}
public void setquantity(int quan)
{
    if(quan > 0);
        quantity = quan;
    if(quan <= 0);
        quan = 0;
}

public int getquantity()
{

    return quantity;
}
public void setprice(double value)
{
    if(value > 0.0);
        price = value;

    if(value <= 0.0);
        price = 0.0;

}
public double getprice()
{
    return price;
}
public double getInvoiceAmount()
{
    return (getquantity() * getprice());

}

}

А вот и код приложения.

public class InvoiceTest
{
public static void main (String args[])
{   
    Invoice invoiceA = new Invoice("1234", "Hammer",2,14.95 );


    System.out.println("Original Invoice Information");         
    System.out.printf("Part Number: %s\n", invoiceA.getpartNumber());
    System.out.printf("Description: %s\n",invoiceA.getpartDescription());
    System.out.printf("Quantity: %d\n", invoiceA.getquantity());
    System.out.printf("Price: %.2f\n", invoiceA.getprice());
    System.out.printf("Invoice Amount: %.2f\n",invoiceA.getInvoiceAmount());


    invoiceA.setpartNumber("001234");
    invoiceA.setpartDescription("Yellow Hammer");
    invoiceA.setquantity(3);
    invoiceA.setprice(19.49);
    System.out.println();

    System.out.println("Updated Invoice Information");
    System.out.printf("Part Number: %s\n", invoiceA.getpartNumber());
    System.out.printf("Description: %s\n",invoiceA.getpartDescription());
    System.out.printf("Quantity: %d\n",invoiceA.getquantity());
    System.out.printf("Price: %.2f\n",invoiceA.getprice());
    System.out.printf("Invoice Amount: %.2f\n",invoiceA.getInvoiceAmount());

    Invoice invoiceB = new Invoice("5678","Paint Brush",-5,-9.99);


    System.out.println("\nOriginal Invoice Information");           
    System.out.printf("Part Number: %s\n", invoiceB.getpartNumber());
    System.out.printf("Description: %s\n",invoiceB.getpartDescription());
    System.out.printf("Quantity: %d\n", invoiceB.getquantity());
    System.out.printf("Price: %.2f\n", invoiceB.getprice());
    System.out.printf("Invoice Amount: %.2f\n",invoiceB.getInvoiceAmount());


    invoiceB.setquantity(3);
    invoiceB.setprice(9.49);
    System.out.println();

    System.out.println("Updated Invoice Information");
    System.out.printf("Part Number: %s\n", invoiceB.getpartNumber());
    System.out.printf("Description: %s\n",invoiceB.getpartDescription());
    System.out.printf("Quantity: %d\n",invoiceB.getquantity());
    System.out.printf("Price: %.2f\n",invoiceB.getprice());
    System.out.printf("Invoice Amount: %.2f\n",invoiceB.getInvoiceAmount());


}
}

4 ответа

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

public void setprice(double value)
{
    if(value > 0.0);
        price = value;

    if(value <= 0.0);
        price = 0.0;

}

Точка с запятой действует как тело для вашего if, поэтому последующие операторы всегда выполняются, и price всегда установлен на 0, Удалить точку с запятой:

public void setprice(double value)
{
    if(value > 0.0)
        price = value;

    if(value <= 0.0)
        price = 0.0;

}

Изменить другой ifв вашем коде аналогично.

+ Изменить

if(price > 0.0){
    price = value;

}

в

if(value> 0.0) {
    price = value;

}

РЕДАКТИРОВАТЬ: и удалить точки с запятой из операторов if.

В вашем конструкторе if(price > 0.0); price = value; должен сказать if (value > 0.0) { price = value }

У вас ошибочная точка с запятой после вашего состояния. Хорошей практикой также является использование фигурных скобок в ваших операторах if - это делает более понятным, какой код будет выполняться, когда условие выполнено.

(Кроме того, вы также пытаетесь изобрести два слова, чтобы обозначать одно и то же. Вместо этого используйте price в качестве имени в методе подписи, и сказать this.price = price; в конструкторе. this.price относится к определенному в классе.)

В вашем setQuantity метод, вы устанавливаете значение quan если аргумент <= 0. Вы должны установить quantity,

public void setquantity(int quan)
{
    if(quan > 0)
        quantity = quan;
    if(quan <= 0)
        quan = 0;            // should be quantity
}

РЕДАКТИРОВАТЬ: и, как указал user1066946 & rgettman, вам нужно удалить точку с запятой из вашего if заявление.

Другие вопросы по тегам