提问人:NobleRuckus 提问时间:12/5/2022 最后编辑:NobleRuckus 更新时间:12/8/2022 访问量:82
有没有更有效的方法从具有多个对象的方法返回布尔值?
Is there a more efficient way of returning a boolean from a method with multiple objects?
问:
请原谅我对这个问题的措辞,我对 Java 还很陌生,所以我不确定如何措辞。基本上,我已经创建了一个清单并添加了 2 种不同的方法:
public class Inventory
{
String name;
Items myItems = new Items();
boolean addFoodItem;
boolean addDrinkItem;
boolean addToyItem;
boolean addCampingItem;
boolean removeFoodItem;
boolean removeDrinkItem;
boolean removeToyItem;
boolean removeCampingItem;
ArrayList<Objects> inventory = new ArrayList<Objects>();
Objects myObjects = new Objects(name);
public boolean AddToInventory (boolean addFoodItem, boolean addDrinkItem, boolean addToyItem, boolean addCampingItem)
{
if (addFoodItem)
{
inventory.add(myItems.foodItem);
System.out.println("You have added 1 " + myItems.FoodItem.name + " to your
inventory.");
}
if (addDrinkItem)
{
inventory.add(myItems.drinkItem);
System.out.println("You have added 1 " + myItems.DrinkItem.name + " to your
inventory.");
}
if (addToyItem)
{
inventory.add(myItems.toyItem);
System.out.println("You have added 1 " + myItems.ToyItem.name + " to your
inventory.");
}
if (addCampingItem)
{
inventory.add(myItems.campingItem);
System.out.println("You have added 1 " + myItems.CampingItem.name + " to your
inventory.");
}
return true;
}
public boolean RemoveFromInventory(boolean removeFoodItem, boolean removeDrinkItem, boolean
removeToyItem, boolean removeCampingItem)
{
if (removeFoodItem)
{
inventory.remove(myItems.foodItem);
System.out.println("You have used 1 " + myItems.foodItem.name + " from your
inventory.");
}
if (removeDrinkItem)
{
inventory.remove(myItems.drinkItem);
System.out.println("You have used 1 " + myItems.drinkItem.name + " from your
inventory.");
}
if (removeToyItem)
{
inventory.remove(myItems.toyItem);
System.out.println("You have used 1 " + myItems.toyItem.name + " from your
inventory.");
}
if (removeCampingItem)
{
inventory.remove(myItems.campingItem);
System.out.println("You have used 1 " + myItems.campingItem.name + " from your
inventory.");
}
return true;
}
public void GetInventory()
{
for (Objects items : inventory)
{
System.out.println(items.name);
}
}
将有更多对象将被添加到此脚本中,这就是为什么我正在寻找一种可能更有效的方法。Items.java类只是创建对象,而 Objects.java类只返回对象的名称,以便可以打印它。所有这些代码都有效,但是当我添加更多项时,我需要不断将其他类中的布尔值切换为 true 和 false,以便运行 AddToInventory 和 RemoveFromInventory 方法。
所以我的问题是,检查是否需要在清单中添加和/或删除多个对象的更有效方法是什么 (ArrayList)。我考虑过对每个单独的检查使用一种方法(用于增加或减少库存),但排除了它,因为它与我上面的方法没有太大区别。 谢谢大家!
我的想法是,如果我从另一个类调用此方法并将布尔值切换为 true,这些方法将执行 if 语句中的代码,并将在“库存”ArrayList 中添加或删除。我看到的低效率是,当从另一个类调用此方法时,我必须在参数中包含所有布尔值,例如:
if (//add check here)
{
Inventory.AddToInventory (boolean addFoodItem = true, boolean
addDrinkItem = false, boolean addToyItem = false, boolean addCampingItem
= false)
}
随着更多项目的添加,这是相当大的文本块。如果可能的话,这就是我想清理的东西。
答:
如果我是你,我会做一个代表每个项目的枚举,并在操作完成后(添加/删除),返回该枚举。这样,您将知道对哪种项目执行了操作。
此外,在您当前的代码中,与其使用多个 if,不如使用开关大小写。
我使用了@racraman建议,并为所有项目创建了一个包含子类的超类,因此方法中没有如此长的项目布尔值参数。从那时起,我添加了 10 个新对象,因此该列表每次都重复会很长而且很丑陋!
评论
return true;
abstract class Item
CampingItem
ToyItem
addToInventiory
foreach option O in List L { if (checked/selected) { <add item to inventory> } }