我想能够使用这样的if-statment:
int price = 60;
if (pizza.equals("string1","string2","string3")) {
int price2 = 10;
System.out.println("You want " + pizza + " and it will cost " + price + price2 +" :-");
}
else if (pizza.equals("string1","string2") {
}
如果我输入的披萨名为string1,string2或string3,那么我想获得一个int值和一个名为price2的变量,然后以某种方式将其添加到价格(price + price2)。
答案 0 :(得分:2)
不,这不是有效的Java。你不能只是弥补和希望。编译器会告诉你。
您可以这样做:
private Map<String, Integer> prices = new HashMap<String, Integer>() {{
put("cheese", 10);
put("pepperoni", 15);
put("five meat", 20);
}};
public int getPrice(String pizzaOrder) {
int price = 0;
if ((pizzaOrder != null) && prices.keySet().contains(pizzaOrder)) {
price = prices.get(pizzaOrder);
}
return price;
}
这样的设计更容易测试,更灵活,封装更好。
答案 1 :(得分:2)
以下是三种基本方法:
1)在if
陈述中使用OR:
if (pizza.equals("pizza1") || pizza.equals("pizza2") || ...)
2)创建switch
声明:
switch(pizza) {
case "pizza1":
case "pizza2":
return 10;
case "pizza3":
return 20;
case "pizza4":
return 15;
}
3)创建一个Map<String, Integer>
存储每个披萨的价格:
Map<String, Integer> prices = new HashMap<>();
prices.put("pizza1", 10);
prices.put("pizza2", 15);
prices.put("pizza3", 500); // Expensive pizza
int price = prices.get(pizza);
答案 2 :(得分:0)
使用switch case语句(Java 7,并确保pizza
不为空)。
switch (Objects.requireNonNull(pizza, "pizza")) {
"string1":
"string2":
"string3":
...
break;
"string4":
"string5":
...
break;
}
或者您可以使用:
if (Arrays.asList("pizza1", "pizza2", "pizza3").contains(pizza)) {
...
} else if (Arrays.asList("pizza3", "pizza4").contains(pizza)) {
...
}
这取决于你的需要,asList可能会被重构为常量,使用不可变集(例如Collections.unmodifiableSet
)。
[编辑]因为某人虽然是enum,但你也可以这样做:
enum Pizza {
pizza1(10),
pizza2(10),
pizza3(0),
pizza4(0);
private final int additionalPrice;
private Pizza(final int additionalPrice) {
this.additionalPrice = additionalPrice;
}
public int getAdditionalPrice() {return this.additionalPrice; }
}
稍后在您的代码中:
String pizzaAsString = "pizza1"; // this is the variable "pizza" in your original code
Pizza pizza = Pizza.valueOf(pizzaAsString);
int price = 60 + pizza.getAdditionalPrice();
在某些情况下(这个),Enum会更好。
答案 3 :(得分:0)
switch-case的一个扩展版本:
int price = 60, price2 = 0;
switch (pizza) {
case "string3":
price2 = 10;
//intentionally no break.
case "string1"://intentionally no break
case "string2":
System.out.println("You want " + pizza + " and it will cost " + (price + price2) +" :-");
break;
default: throw new IllegalStateException("Wrong string for pizza: " + pizza);
}
我可能会使用枚举而不是字符串。