Разрешение пользователю создать более 1 объекта - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь написать программу, которая позволяет пользователю создавать 2 депо.У меня это есть в операторе switch, но когда оно завершается, и я возвращаюсь к созданию второго депо, оно перезаписывает depot1.

Я не уверен, как бы я смог создать 2 отдельных депо.

do {
    System.out.println("(1) Add depot number 1 ");
    System.out.println("(2) Remove a depot");
    System.out.println("(3) Exit program");
    option = console.nextInt();

    switch (option) {
        case 1: 
            depot1 = new Depot();                           
            if (depot1.checkDepot() == true){
                System.out.println("Enter Depots name");
                n = console.next();
                depot1.setDepotName(n);                                
            }
            else{
                System.out.println("Error only 2  depots allowed");
            }
            break;

        case 2:
        case 3:
            System.exit(0);
    }
}
while (option !=3);
public class Depot 
{
   private String name;
   private Product product1, product2, product3;
   static int depotCounter = 0;

   // Constructor to count depot objects 
    public Depot(){
        depotCounter++;
    }
   // Method to make sure no more than 2 depots are created
    public boolean checkDepot(){
        if (depotCounter <= 2){
            return true;
        }
        else{
            return false;
        }

Является ли мой класс депо, у меня есть счетчик и контрольный пункт, чтобы убедиться, что создано только 2.

Это прекрасно создает depot1, но когда я снова вхожу в оператор и нажимаю(1) перезаписывает новое имя поверх объекта depot1

Ответы [ 3 ]

1 голос
/ 10 апреля 2019

Когда вы вводите опцию 1, все, что она делает, это выполняет код в первом «переключателе».И там вы всегда используете depot1 в качестве переменной.Кстати, после выхода из оператора switch ваше хранилище в любом случае теряется, потому что вы объявляете его в этом блоке.Что вы могли бы сделать, это что-то вроде этого:

do {
    Depot depot1;
    Depot depot2;
    //Your code for the menu, e.g. selecting what the user wants to do
    switch (option) {
        case 1 :
            if (depot1 == null) {
                depot1 = new Depot()
                //Do what you want to do with your depot
            } else if (depot2 == null) {
                depot2 = new Depot()
                //Same as above
            }
            break;
            //Rest of the switch statement
    }
} while (option != 3)

То, что я сделал там, это просто использование 2 разных переменных для депо, и когда вы хотите создать новое хранилище, вы сначала проверяете, если вы ужесоздал депо (если, например, depot1 указывает на какой-то объект, поэтому если depot1 == null равно false), а затем создайте соответствующий депо.Если вы вообще не создали депо, то депо1 равно нулю, поэтому вы создаете депо1.Если вы уже создали depot1, depot1 == null имеет значение false, поэтому он переходит ко второму блоку if, проверяет, имеет ли значение depot2 значение null, поэтому он создает depot2.Когда уже есть 2 депо, оно ничего не делает.

Если вам нужно более 2 депо, то, что сказал Рюкзак в своем ответе, - ваш путь.

Подводя итог: a) Вам нужноразные переменные для ваших депо, а не только одна, так что вы не просто перезаписываете свое текущее депо.б) Если вы хотите, чтобы ваши объекты сохранялись за пределами оператора switch, вам нужно объявить их вне его.Переменные «живут» только внутри блока, в котором вы их объявляете.

0 голосов
/ 10 апреля 2019
 int option = 0;
        Depot depot;
        String name;
        Scanner console = new Scanner(System.in);
        List<Depot> depotList = new ArrayList<>();
        do {

            System.out.println("(1) Add depot number ");
            System.out.println("(2) Remove a depot");
            System.out.println("(3) Exit program");
            if (console.hasNextInt()) {
                option = console.nextInt();

                switch (option) {
                    case 1:
                        if (depotList.size() < 2) {
                            System.out.println("Enter new Depot name:");

                            if (console.hasNext()) {
                                name = console.next();
                                depot = new Depot();
                                depot.setDepotName(name);
                                depotList.add(depot);
                            }
                        } else {
                            System.out.println("Error only 2  depots allowed");
                        }
                        break;
                    case 2:
                        // remove depot code
                        break;
                    case 3:
                        break;
                }
            }
        } while (option != 3);

        System.out.println("Depots added:");
        System.out.println("-------------");
        depotList.forEach(currentDepot ->
            System.out.println(currentDepot.getDepotName()));         
0 голосов
/ 10 апреля 2019

Вы можете попробовать создать список складов и просто просмотреть их. Таким образом, вы можете добавить объект, когда пожелаете, в список или удалить его из списка.

Кроме того, вы можете добавить в объект depot идентификатор, который дает идентификатор или что-то подобное, чтобы вы могли различать их.

...