需要有关我的java if语句的建议

时间:2014-08-08 10:56:27

标签: java string if-statement int

我想能够使用这样的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)。

4 个答案:

答案 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);
}

我可能会使用枚举而不是字符串。

相关问题