在Java中编写许多if语句的更好方法?

时间:2017-12-09 19:45:36

标签: java

所以我有这个功课,我需要建立一个自动售货机,我为每个产品(A1,A2,A3 ..)分配了一个坐标,当用户输入硬币值时,我必须计算他是否可以购买他选择的产品,如果可以计算变化,因为我还是编程的新手,我现在已经结束了许多这样的陈述

if ("a1".equals(choice)) {
    System.out.println("You chose SNICKERS!");
    if (money < 50) {
        System.out.println("This is not enough money to buy this product");
    } else if (money >= 50) {
        System.out.println(" Price = 50  Your change = " + (money - 50));
    }
}

其中唯一改变的是坐标(a1,a2,a3,a4,b1,b2等)和价格。什么是更好的方法呢?

3 个答案:

答案 0 :(得分:4)

您可以使用更多OO方法。

创建一个名为Product的课程:

class Product {
    private String name;
    private int price;

    public String getName() { return name; }
    public int getPrice() { return price; }

    public Product(String name, int price) {
        this.name = name;
        this.price = price;
    }
}

然后,创建一个HashMap<String, Product>并将所有产品及其坐标添加到:

HashMap<String, Product> productMap = new HashMap<>();
productMap.put("A1", new Product("Snickers", 50));
productMap.put("A2", new Product("Something else", 40));
// do this for every coordinate...

现在,您可以使用此代码:

Product chosenProduct = productMap.get(choice);
System.out.println("You chose " + chosenProduct.getName() + "!");
if (money < chosenProduct.getPrice()) {
    System.out.println("This is not enough money to buy this product");
} else {
    System.out.println(" Price = " + chosenProduct.getPrice() + "  Your change = " + (money - chosenProduct.getPrice()));
}

答案 1 :(得分:0)

这是编程中的一个常见时刻,你认为有更好的方法可以解决这个问题。

在您的特定情况下,您在许多地方都有类似的代码结构,您应该尝试使用一个函数。尝试在同一个类中编写一个私有函数,它接受一些更改的参数。根据您最终的复杂程度,您最终可能会得到一个具有大量参数的大型函数,这些参数也不是很好。无论如何,写一个函数可能是你遇到这种情况时应该去的第一个地方。

其次,请考虑这段代码正在做什么。制作一个通用函数来替换整个代码段可能并不理想,但是你可以轻松编写一个函数来完成它的一小部分吗?如果是这样,现在是否可以轻松地将其余部分转换为另一个功能?跟踪您在许多类似代码段中的任何差异(如果有),并尝试创建解决这些变体的函数。

最后,根据您当前编程水平的范围,您可能能够创建数据结构以帮助识别选择。例如,您可以创建一个可以存储每个选项的地图,以及一个包含响应用户所需的所有数据的关联对象(即成本,项目名称等)。使用这种方法,您可以以简单的方式预先填充所有这些选项,并让您的代码只需查找与选择和函数调用相关的数据集,以打印必要的输出。

最终,你如何应对这种情况以及未来的情况,这在很大程度上取决于你的编程经验水平以及有多少选择以及与每种选择相关的数据有多复杂。

继续相信你的直觉,他们会很好地为你服务。

答案 2 :(得分:-3)

Switch case是所需的功能。

switch(choice) {
    case 'a' : <some code>
         break;
    case 'b': <some other code>
         break;
    default: <if none of the choices matched>
} 

唯一需要注意的是,您的选择值必须是charint

相关问题