gpt4 book ai didi

java - 如何避免在此代码中使用 if-else?

转载 作者:行者123 更新时间:2023-12-01 06:03:18 25 4
gpt4 key购买 nike

作为学习过程的一部分,我正在用 Java 创建一个小程序,该程序将帮助一家虚构的公司销售汉堡。

在下面的代码中,我为汉堡创建了类,并添加了选项来向该汉堡添加添加物(如生菜、胡萝卜等)。

我面临的问题是如何在不使用太多 if-else 的情况下检查基本汉堡包的每个额外添加内容(基本汉堡包仅意味着面包和肉)。我尝试的一种方法(您也可以在代码中看到)是为每个添加分配一个数字,例如,1 为生菜,2 为胡萝卜等。 1 和 2 相加得到 3;我们可以通过查找3来判断是否添加了生菜和胡萝卜,这样我们就可以计算价格了。我也用其他选项做到了这一点。

但是出现了一些问题:

  1. 在某些情况下,通过加法生成的数字会通过不同的加法创建两次,这可以通过将数字与某个数字相乘或在创建更多边缘情况时加 1 来解决。

  2. 通过创建此类案例,我的主要问题是需要大量 if-else 语句,我试图避免这些语句,以便有效地编写我需要的代码。

请建议是否有其他方法可以做到这一点。请注意,代码尚未完成,因为我不想创建更多 if-else 语句(在 hamburger 类中;方法 cal_price)来检查添加内容,但这足以完全理解代码的本质。代码如下:

public class Main {

public static void main(String[] args) {
Breadroll breadroll_type = new Breadroll("Sesame Seed Bun");
meat meat_type = new meat("Beef");
Hamburger my_burger = new Hamburger("Hamburger",breadroll_type,meat_type);
my_burger.select_items(1,2,3,4);
my_burger.cal_price();

my_burger.getBreadroll_type();
my_burger.getMeat_type();
}
}
public class Breadroll {
private String breadroll_type;

public Breadroll(String breadroll_type) {
this.breadroll_type = breadroll_type;
}

public String getBreadroll_type() {
return breadroll_type;
}
}
public class meat {
private String meat_type;

public meat(String meat_type) {
this.meat_type = meat_type;
}

public String getMeat_type() {
return meat_type;
}
}

public class Hamburger {

private String name;
Breadroll breadroll_type;
meat meat_type;
private double base_price; //Price without addons
private int lettuce;
private int carrot;
private int tomato;
private int cheese;
private int hot_sauce;
private int mustard;
private int total_select;

public Hamburger(String name, Breadroll breadroll_type, meat meat_type) {
this.name = name;
this.breadroll_type = breadroll_type;
this.meat_type = meat_type;
this.base_price = 2.75;
}


public void select_items(int lettuce, int carrot, int tomato, int cheese) {

this.lettuce = lettuce;
this.carrot = carrot;
this.tomato = tomato;
this.cheese = cheese;
this.total_select = lettuce + carrot + tomato + cheese;


}


public void cal_price()
{
double final_price;
double lettuce_price = 0.50;
double carrots_price = 0.60;
double tomatos_price = 0.70;
double cheese_price = 0.85;

if(total_select == 0) {
System.out.println("Order Placed : Hamburger with no additions " + getBase_price() + "$");
}


else if (total_select == 1) {
final_price = getBase_price() + lettuce_price;
System.out.println("Order Placed : Hamburger with all lettuce " + (float) final_price + "$");
}
else if (total_select == 2) {
final_price = getBase_price() + carrots_price;
System.out.println("Order Placed : Hamburger with all carrot " + (float) final_price + "$");
}
else if (total_select == 3) {
final_price = getBase_price() + tomatos_price;
System.out.println("Order Placed : Hamburger with all tomato " + (float) final_price + "$");
}
else if (total_select == 4) {
final_price = getBase_price() +cheese_price;
System.out.println("Order Placed : Hamburger with all cheese " + (float) final_price + "$");
}
else if (total_select*100 == 1000) {
final_price = getBase_price() + lettuce_price + carrots_price + tomatos_price + cheese_price;
System.out.println("Order Placed : Hamburger with all additions " + (float) final_price + "$");
}

}

public String getName() {
return name;
}

public void getBreadroll_type() {
System.out.println(breadroll_type.getBreadroll_type());
}

public void getMeat_type() {
System.out.println(meat_type.getMeat_type());
}

public double getBase_price() {
return base_price;
}

public int getLettuce() {
return lettuce;
}

public int getCarrot() {
return carrot;
}

public int getTomato() {
return tomato;
}

public int getCheese() {
return cheese;
}
}

最佳答案

您对“汉堡包”对象的实现似乎有点过于复杂。通常,面向对象编程来表示实际的物理对象应该尽可能选择最简单、最原子的属性,以避免出现这种情况。汉堡要么有生菜,要么没有生菜。它要么有番茄,要么没有番茄。我的建议是为每个配料使用单独的 boolean 变量,或者如果您愿意,可以使用代表配料的 boolean 数组。然后,将 get_price() 方法添加到您的汉堡包中,该方法具有用于计算价格的 if 语句 block 。如果您确实想了解 OOP,每个配料都可以是一个带有价格的对象,您可以将其附加到汉堡包的 Toppings ArrayList 中。然后,您的 get_price() 方法将使用 for-each 来计算 Topping 对象的所有价格以及汉堡包的价格属性的总和。如果您想要多份相同的配料,此方法可能会更好。这是编程的有趣部分 - 您可以选择对您来说最有意义的实现并尝试一下!

关于java - 如何避免在此代码中使用 if-else?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51866726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com