Количество элементов не обновляется

#java #oop

#java #ооп

Вопрос:

это мой вывод:

Код товара: 1, Название товара: X Box Series X, Поставщик: Microsoft, отдел ноутбуков, настольных компьютеров и консолей Стоимость: 449.99

Код товара: 1, Название товара: Playstation 5 , Поставщик: Sony, Отдел ноутбуков, настольных компьютеров и консолей Стоимость: 449.99

Код товара: 1, Название товара: Oculus Quest 2, Поставщик: Facebook, Отдел ноутбуков, настольных компьютеров и консолей Стоимость: 299.0

Я не понимаю, почему код элемента не обновляется. Что я делаю не так?

 public class OrderApp {

public static void main(String[] args) {
    int MAX = 5;
    int itemCount = 0;

    OrderItem[] stock = new OrderItem[MAX]; // Initialise empty array with MAx as the size limit

    stock = addThreeItems(stock, itemCount);
    itemCount  = 3; // cannot return 2 variables within one method therefore itemCount must be
                    // increased outside of method

    testPrint(stock, itemCount); // Prints all current items
}

public static void testPrint(OrderItem[] stock, int itemCount) { // Prints all current items
    for (int i = 0; i < itemCount; i  ) {
        System.out.println(stock[i].toString());
    }
}

public static OrderItem[] addThreeItems(OrderItem[] stock, int itemCount) { // Adds 3 predetermined items

    OrderItem itm1 = new OrderItem("X Box Series X", "Microsoft", 449.99, Department.COMPUTING);
    OrderItem itm2 = new OrderItem("Playstation 5 ", "Sony", 449.99, Department.COMPUTING);
    OrderItem itm3 = new OrderItem("Oculus Quest 2", "Facebook", 299.00, Department.COMPUTING);
    stock[itemCount  ] = itm1; //    iterates AFTER being used making it useful in getting a value, using it
                                // and changing it all in one line
    stock[itemCount  ] = itm2;
    stock[itemCount  ] = itm3;

    return stock; // must use return statement to affect the array
}
 

}

класс элемента заказа:

 public class OrderItem {

private int itemCode = 1;
private String itemName;
private String itemSupplier;
private double itemCost;
private Department dept;

public OrderItem(String itemName, String itemSupplier, double itemCost, Department dept) {
    this.itemName = itemName;
    this.itemSupplier = itemSupplier;
    this.itemCost = itemCost;
    this.dept = dept;
    
    

}

public String getDetails() {
    String res = "Item Name: " getItemName() ", Supplier: " getSupplier() ", Department: " dept ", Cost: " getitemCost();

    return res;

}

public int useNextCode() {

    this.itemCode = useNextCode();

    itemCode  ;

    return itemCode;

}

public int getItemCode() {
    
    return this.itemCode;

}

public String getItemName() {
    
    return this.itemName;
}

public String getSupplier() {
    
    return this.itemSupplier;
    
}

public double getitemCost() {
    return this.itemCost;
}

public String toString() { 

    String res = "Item Code: " getItemCode() ", Item Name: " getItemName() ", Supplier: " getSupplier() ", Department " dept " Cost: " getitemCost();

    return res;


    
}
 

}

Комментарии:

1. Показать код OrderItem класса

2. только что добавил его @PiotrAleksanderChmielowski

Ответ №1:

Вы не устанавливаете значение itemCode — оно всегда имеет значение по умолчанию 1 .

Добавьте параметр int itemCode в конструктор, добавьте также следующую строку:

 this.itemCode = itemCode
 

А затем измените addThreeItems следующим образом:

 public static OrderItem[] addThreeItems(OrderItem[] stock, int itemCount) { // Adds 3 predetermined items

    stock[itemCount] = new OrderItem(itemCount, "X Box Series X", "Microsoft", 449.99, Department.COMPUTING);
    itemCount  ;
    stock[itemCount] = new OrderItem(itemCount, "Playstation 5 ", "Sony", 449.99, Department.COMPUTING);
    itemCount  ;
    stock[itemCount] = new OrderItem(itemCount, "Oculus Quest 2", "Facebook", 299.00, Department.COMPUTING);
    itemCount  ;

    return stock; // must use return statement to affect the array
}
 

Ответ №2:

В настоящее время вы инициализируете новое целое число ItemCode каждый раз, когда создаете новый экземпляр OrderItem.

Если вы хотите, чтобы ‘ItemCode’ обновлялся, вам нужно будет изменить делячество ‘ItemCode’ в OrderItem на:

 private static int itemCode = 1;
 

Что было бы еще лучше, если бы вы назначили это в конструкторе:

 private final int itemCode;
private static int nextCode = 1;
private String itemName;
private String itemSupplier;
private double itemCost;
private Department dept;

public OrderItem(String itemName, String itemSupplier, double itemCost, Department dept) {
    this.itemName = itemName;
    this.itemSupplier = itemSupplier;
    this.itemCost = itemCost;
    this.dept = dept;
    this.itemCode = nextCode  ;
    

}