我目前有多个这样的代码用于不同的浇头
// Toppings - Egg
System.out.print("Do you want " + egg.getType() + "?");
input = keyboard.nextLine();
choice = input.charAt(0);
if (choice == 'y') {
l.add(egg.getType());
c.add((double) egg.getCost());
numberOfToppings = numberOfToppings + 1;
totalToppingPrice = totalToppingPrice + egg.getCost();
toppings = toppings + "Egg";
}
它工作正常,但我希望我可以在一个代码块中完成所有的浇头。因为我有大约5个,而且它占用太多,我被建议这样做。任何人对如何做到这一点有任何想法?感谢
答案 0 :(得分:1)
我建议你制作一个Topping类,你可以使用如下:
Toppping egg = new Topping ("egg", 0.5); // Cost
ArrayList<Topping> toppings = new ArrayList<Topping>();
toppings.add(egg);
稍后您可以循环遍历类似于此的toppings向量:
for (Topping current : toppings) {
if (wantsTopping(current)) {
chosenToppings.addObject(current);
}
}
注意:这是类似Java的代码,但它不会编译。还有一些你需要查找的东西
答案 1 :(得分:1)
只要顶部集合已关闭且在程序执行期间无法更改,所有顶部应在枚举中聚集在一起。
enum Topping{
EGG("egg", 22),... ;
private String type;
private double cost;
private Topping(String type, double cost){
this.type = type;
this.cost = cost;
}
//getters and setters
}
然后,您可以在您的类中编写一个包含上述代码的方法,该方法应该能够处理Topping
实例,如下所示:
private handleTopping(Topping top){
System.out.print("Do you want "+top.getType() +"?");
input = keyboard.nextLine();
choice = input.charAt(0);
if (choice == 'y'){
l.add(top.getType());
c.add(top.getCost());
numberOfToppings = numberOfToppings + 1;
totalToppingPrice = totalToppingPrice + top.getCost();
toppings = toppings + " " + top.getType();
}
}
最后,调用所有可用浇头的方法
for(Topping top : topping.values()){
handleTopping(top);
}
关于DRY(不要重复自己的原则)。它甚至不一定与面向对象的范例联系在一起。即使在过程式编程中,其中一个核心原则是为参数化过程提取常用和常用功能。