Java 使用哪些方法代替if-else语句?

Java 使用哪些方法代替if-else语句?,java,if-statement,Java,If Statement,有没有一种方法可以减少使用java netbean编写的大量条件的代码量?我使用了if-else语句和许多条件,并意识到我的代码相当长。条件取自组合框和文本字段(尚未添加) 我在底部有一个代码示例。我需要加上20+这个,所以我不确定else语句是否是唯一的选项 if (RegionBx.getSelectedItem().equals("Tokyo") && SeasonBx.getSelectedItem().equals("Spring") &

有没有一种方法可以减少使用java netbean编写的大量条件的代码量?我使用了if-else语句和许多条件,并意识到我的代码相当长。条件取自组合框和文本字段(尚未添加)

我在底部有一个代码示例。我需要加上20+这个,所以我不确定else语句是否是唯一的选项

    if (RegionBx.getSelectedItem().equals("Tokyo") &&
        SeasonBx.getSelectedItem().equals("Spring") && 
        MealBx.getSelectedItem().equals("Nil")) {
          TravelCost = Tokyo + (Tokyo * sphotel) + (Tokyo * spflight);
    } 

没有这样的模式可以减少每种体系结构的
if-else
语句的数量

对于这类任务,只需将字符串映射到价格即可

摆脱使用条件句的需要。使用集合将可能的输出数据与可能的输入数据关联起来

 Map<String, Integer> cityPrices = HashMap<String, Integer>();
 Map<String, Integer> seasonPrices = HashMap<String, Integer>();
 Map<String, Integer> mealPrices = HashMap<String, Integer>();

 // Don't forget to initialize your collections. 
 // Put possible string values and their prices in maps.

 cityPrices.put("Tokyo", 10000);
 ...

 Integer regionPrice = cityPrices.get(RegionBx.getSelectedItem()); 
 Integer seasonPrice = regionPrice * seasonPrices.get(SeasonBx.getSelectedItem());
 Integer mealPrice = regionPrice * mealPrices.get(MealBx.getSelectedItem());

 Integer travelCost = regionPrice + seasonPrice + mealPrice; // Now it is one line for all cases.
Map cityPrices=HashMap();
Map=HashMap();
Map mealPrices=HashMap();
//别忘了初始化集合。
//将可能的字符串值及其价格放入地图中。
城市价格。put(“东京”,10000);
...
整数regionPrice=cityPrices.get(RegionBx.getSelectedItem());
整数seasureprice=regionPrice*seasureprices.get(seasurebx.getSelectedItem());
整数mealPrice=regionPrice*mealPrices.get(MealBx.getSelectedItem());
整数旅行成本=地区价格+季节价格+平均价格;//现在,它是所有情况下的一行。

没有这样的模式,可以减少每种体系结构的
if-else
语句的数量

对于这类任务,只需将字符串映射到价格即可

摆脱使用条件句的需要。使用集合将可能的输出数据与可能的输入数据关联起来

 Map<String, Integer> cityPrices = HashMap<String, Integer>();
 Map<String, Integer> seasonPrices = HashMap<String, Integer>();
 Map<String, Integer> mealPrices = HashMap<String, Integer>();

 // Don't forget to initialize your collections. 
 // Put possible string values and their prices in maps.

 cityPrices.put("Tokyo", 10000);
 ...

 Integer regionPrice = cityPrices.get(RegionBx.getSelectedItem()); 
 Integer seasonPrice = regionPrice * seasonPrices.get(SeasonBx.getSelectedItem());
 Integer mealPrice = regionPrice * mealPrices.get(MealBx.getSelectedItem());

 Integer travelCost = regionPrice + seasonPrice + mealPrice; // Now it is one line for all cases.
Map cityPrices=HashMap();
Map=HashMap();
Map mealPrices=HashMap();
//别忘了初始化集合。
//将可能的字符串值及其价格放入地图中。
城市价格。put(“东京”,10000);
...
整数regionPrice=cityPrices.get(RegionBx.getSelectedItem());
整数seasureprice=regionPrice*seasureprices.get(seasurebx.getSelectedItem());
整数mealPrice=regionPrice*mealPrices.get(MealBx.getSelectedItem());
整数旅行成本=地区价格+季节价格+平均价格;//现在,它是所有情况下的一行。

如果不看到您试图解决的整个问题,很难说清楚。但是,如果这些测试的模式非常统一,那么您可以尝试各种方法。比如说

switch (regionBx.getSelectedItem() + ":" +
        seasonBx.getSelectedItem() + ":" +
        mealBx.getSelectedItem()) {
case "Tokyo:Spring:Nul":
    travelCost = tokyo + (tokyo * sphotel) + (tokyo * spflight);
    break;
...
} 
或:

String[][]标准=新字符串[][]{
{“东京”、“春天”、“努尔”},
...
};
IntSupplier[]计算=新IntSupplier[]{
()->东京+(东京*sphotel)+(东京*spflight),
...
};
String region=regionBx.getSelectedItem();
字符串seasure=seasurebx.getSelectedItem();
字符串mean=mealBx.getSelectedItem();
对于(int i=0;i
(我不确定第二版的语法是否完全正确。请评论或编辑。)

如果您可以将计算表示为一个基于可在地图中查找的有限因素集的公式,请参见@Steyrix's


但是,目前还不清楚,与使用大量
if
测试的版本相比,结果是否会更好(更可读/更易于维护)

而且它们不太可能更有效率


我个人的建议是在第一个版本中使用
if
测试,如果该方法扩展到数百行代码,则只需花费精力“润色”代码。

很难说没有看到您试图解决的整个问题。但是,如果这些测试的模式非常统一,那么您可以尝试各种方法。比如说

switch (regionBx.getSelectedItem() + ":" +
        seasonBx.getSelectedItem() + ":" +
        mealBx.getSelectedItem()) {
case "Tokyo:Spring:Nul":
    travelCost = tokyo + (tokyo * sphotel) + (tokyo * spflight);
    break;
...
} 
或:

String[][]标准=新字符串[][]{
{“东京”、“春天”、“努尔”},
...
};
IntSupplier[]计算=新IntSupplier[]{
()->东京+(东京*sphotel)+(东京*spflight),
...
};
String region=regionBx.getSelectedItem();
字符串seasure=seasurebx.getSelectedItem();
字符串mean=mealBx.getSelectedItem();
对于(int i=0;i
(我不确定第二版的语法是否完全正确。请评论或编辑。)

如果您可以将计算表示为一个基于可在地图中查找的有限因素集的公式,请参见@Steyrix's


但是,目前还不清楚,与使用大量
if
测试的版本相比,结果是否会更好(更可读/更易于维护)

而且它们不太可能更有效率


我个人的建议是在第一个版本中使用
if
测试,如果该方法扩展到数百行代码,则只需在“润色”代码上花费精力。

使用适当的设计是肯定的,但没有可以使用的魔术。在这种情况下,您可以做一些事情,比如将价格和价格修饰符保留在
Map
s中,这样
price.get(city)*season.get(city)
等@TontonVelu这会有什么帮助?这里有一种方法:找出所有if语句中的不同点和相同点。用相同的部分编写一个方法,用不同的部分作为参数。你调用该方法20次。Switch方法不仅处理整数,而且在这里对你也没有帮助。当然,使用字典将框中的文本映射到成本,然后你的代码变成一行,你将所有东西的成本加起来,根据用户选择的内容索引区域/季节/膳食字典。当然,但是没有什么魔术可以用。在这种情况下,您可以执行一些操作,例如保留价格和价格修改器