我正在尝试编写一个允许用户创建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上重新写入一个新名称
当您输入选项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语句之外保持不变,则需要在它之外声明它们。变量只在块中“活动”,您声明它们。
您可以尝试创建一个depot列表,然后迭代它们。这样,您可以随时添加对象到列表中,或从列表中删除它。
此外,您可以在库对象中添加一个标识符,该标识符可以像ID一样提供,以便您可以区分它们。
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()));