#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 ;
}