Хранение пользовательского ввода в массиве не начиная с 0 - PullRequest
0 голосов
/ 10 февраля 2019

Моя проблема в том, что в моем коде ниже, в ОПЦИИ 2, если пользователь Store = 1 и данные элемента перезаписывают элемент [0] новыми данными.Я хочу сохранить его в item [7] и не перезаписывать текущую информацию.Элемент находится в методе конструктора в другом классе.Пожалуйста, посмотрите, как я могу решить эту проблему и улучшить мой код.

//constructor class

public class Item {

private String itemName;
private int itemNumber;
private int itemQuantity;
private double itemPrice;

public Item() {
    itemName = " ";
    itemNumber = 0;
    itemQuantity = 0;
    itemPrice = 0.0;
}

public Item(String name, int itemNum, int itemQty, double itemP) {
    this.itemName = name;
    this.itemNumber = itemNum;
    this.itemQuantity = itemQty;
    this.itemPrice = itemP;
}

public void setItemName(String name) {
    this.itemName = name;
}

public void setItemNumber(int itemNum) {
    this.itemNumber = itemNum;
}

public void setItemQuantity(int itemQty) {
    this.itemQuantity = itemQty;
}

public void setItemPrice(double itemP) {
    this.itemPrice = itemP;
}

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

public int getItemNumber() {
    return this.itemNumber;
}

public int getItemQuantity() {
    return this.itemQuantity;
}

public double getItemPrice() {
    return this.itemPrice;
}

public void displayData() {
    for (int i = 0; i < 1; i++) {
        System.out.println("Name: " + this.itemName + "\t\tItem number: " + this.itemNumber + "\t\tPrice: $" + this.itemPrice
                + "\t\tQuantity: " + this.itemQuantity);
    }
}

public boolean is_the_same(Item itemNum) {
    boolean same = (itemName.equals(itemNum.itemName) && itemNumber == itemNum.itemNumber);
    return same;
}
} //end of constructor

import java.util.Scanner;

public class test {

public static void main(String[] args) {
    Item ItemArray[] = new Item[6];
    Scanner input = new Scanner(System.in);

    String[] itemName = {"Eggs", "Chicken", "Coca-Cola", "Apple", "Water", "Chocolate"};
    int[] itemNumber = {1, 5, 11, 15, 12, 20};
    Double[] itemPrice = {0.2, 5.8, 1.4, 0.6, 1.0, 0.7};
    int[] itemQuantity = {60, 20, 12, 35, 80, 58};

    for (int x = 0; x < ItemArray.length; x++) {
        ItemArray[x] = new Item(itemName[x], itemNumber[x], itemQuantity[x], itemPrice[x]);
    }

    for (int i = 0; i < 1; i++) {
        System.out.println("Choose one of the options[] below: \n[1] Buy item. \n[2] Add an item to store. \n[3] List all items and their prices. \n[4] Search for an item.");
        System.out.print("Enter Option: ");
        int Option = input.nextInt();

        if (Option < 1 || Option > 4) {
            System.out.println("\nInvalid Option. Please enter option again.");
            System.out.println("Choose one of the options[] below: \n[1] Buy item. \n[2] Add an item to store. \n[3] List all items and their prices. \n[4] Search for an item.");
            System.out.print("Enter Option: ");
            Option = input.nextInt();
        }

        if (Option == 2) {
            System.out.print("\n--------------OPTION 2--------------");
            System.out.print("\nHow many items to add to store: ");
            int Store = input.nextInt();

            for (int c = 0; c < Store; c++) {
                System.out.print("Name: ");
                ItemArray[c].setItemName(input.next());
                System.out.print("Number: ");
                ItemArray[c].setItemNumber(Integer.parseInt(input.next()));
                System.out.print("Price: $");
                ItemArray[c].setItemPrice(Double.parseDouble(input.next()));
                System.out.print("Quantity: ");
                ItemArray[c].setItemQuantity(Integer.parseInt(input.next()));
            }

            input.close();

            System.out.print("\n\n");
            for (int c = 0; c < ItemArray.length; c++) {
                ItemArray[c].displayData();
            }
            System.exit(0);
        }
    }
}
}

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Здравствуйте, oreder, чтобы делать то, что вы хотите, вам нужно две вещи.

  1. Делайте, как говорит вышеупомянутый коллега, используйте Список.Возможно, лучше использовать Набор в вашем случае, чтобы гарантировать, что Предмет может быть добавлен только один раз, и тогда вы можете просто изменить количество существующих предметов в сумке.
  2. Используйте цикл while (true) вместо цикла for
  3. Добавьте параметр, соответствующий концу пользовательского ввода, который выведет вас из цикла while (true).

Если вы решили сохранить массив.вам нужно выполнить инициализацию достаточно большого массива и сохранить индекс последнего добавленного элемента.Опять же, вам нужно время (true) с условием выхода, чтобы сделать этот индекс разумным.

0 голосов
/ 10 февраля 2019

Если вы вставляете новый элемент по определенному индексу, использование объекта List или другой коллекции будет проще, чем использование примитивов массива.

Функция List.addпозволяет вставить элемент в определенную позицию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...