让用户创建多个对象

问题描述 投票:0回答:3

我正在尝试编写一个允许用户创建2个软件仓库的程序。我在switch语句中有它,但是当它完成并且我回去创建第二个depot时它会覆盖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上重新写入一个新名称

java switch-statement
3个回答
1
投票

当您输入选项1时,它所做的就是执行第一个“switch-case”中的代码。在那里,你总是使用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为空,因此您创建了depot1。如果你已经创建了depot1,那么depot1 == null是false,所以它跳转到第二个if-block,检查depot2是否为null,它是,所以它创建了depot2。当已有2个仓库时,它什么都不做。

如果你想要超过2个仓库,那么Backpack在他的回答中说的是你要走的路。

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


0
投票

您可以尝试创建一个depot列表,然后迭代它们。这样,您可以随时添加对象到列表中,或从列表中删除它。

此外,您可以在库对象中添加一个标识符,该标识符可以像ID一样提供,以便您可以区分它们。


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()));         
© www.soinside.com 2019 - 2024. All rights reserved.