让用户创建多个对象

时间:2019-04-10 11:22:10

标签: java switch-statement

我正在尝试编写一个程序,允许用户创建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;
        }

是我的仓库类,我有一个计数器和一个checkdepot以确保仅创建2个。

它可以很好地创建depot1,但是当我再次进入该语句并单击(1)时,它将在对象depot1上重新写一个新名称

3 个答案:

答案 0 :(得分:1)

输入选项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),然后创建相应的软件仓库。如果您根本没有创建仓库,那么depot1为空,因此您创建了仓库1。如果已经创建了depot1,则depot1 == null为false,因此它跳转到第二个if-block,检查depot2是否为null,因此创建depot2。当已经有2个仓库时,它什么也不做。

如果您想要两个以上的仓库,Backpack在回答中说的是您要走的路。

总结一下: a)您需要为仓库提供不同的变量,而不仅仅是一个变量,因此您不仅要覆盖当前的仓库。 b)如果您希望对象在switch语句之外持久存在,则需要在它之外声明它们。变量只在其中声明它们的块内“活动”。

答案 1 :(得分:0)

您可以尝试创建软件仓库的列表,然后对其进行遍历。这样,您可以随时将对象添加到列表中,或从列表中删除它。

此外,您可以在软件仓库对象中添加一个标识符,该标识符可以提供ID或类似名称,以便您区分它们。

答案 2 :(得分:0)

 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()));