【问题标题】:How to Create a Shipping Cost Calculator in Java如何在 Java 中创建运费计算器
【发布时间】:2012-02-19 06:16:22
【问题描述】:

我正在创建一个计算器来计算运费。代码是这样的:

class ShippingCalc {
    public static void main(String[] args) {
        int weight = 30;

        if (weight < 10) {
            System.out.println("Shipping costs $1.");
        }
        else if (weight < 20) {
            System.out.println("Shipping costs $2.");
        }
        else {
            System.out.println("Shipping costs $3.");
        }
    }
}

这一切都很好,但我想创建一个可以根据已经设置的值进行计算的计算器。例如,说:

if (weight < 250) {
   // print("Shipping cost is $1);
} else if (weight < 499) {
   // print("Shipping cost is $2);
} else if (weight < 749) {
   // print...etc and it keeps going 

这将基于用户输入,这就是我不希望已经有任何上述约束的原因。有没有可能用Java做一个这样的计算器,不管有多少重量,它都能适当地计算出运费并给出答案。

如果是,那我该怎么做?

【问题讨论】:

  • 是的,通过使用简单的数学和编写代码是可能的。你为什么不试一试,看看你想出了什么。 总是最好先尝试解决问题,然后在此处发布您的作业之前展示您的努力。再说一次,这不过是最基本的代数,我敢打赌,如果你把铅笔放在纸上,你就能弄清楚。
  • 这不是我的任务。我正在尝试将 Java 作为一种爱好来学习,因此是标签爱好。至于尝试,我已经尝试过了,但我能想到的只是有限的方式,需要大量的代码。我不需要别人为我做这件事,只要让我朝着正确的方向轻推即可。
  • 编辑,好吧,也许不是那么容易,因为你的数字没有逻辑,除非它总是增加 150 美元。您必须为该...etc 位显示更多数字。请充分展示图案。我没有假设这是家庭作业,因为我的建议适用于家庭作业或家庭作业(来自另一个爱好)。
  • @HovercraftFullOfEels 重量增加150,价格增加1美元。那部分代码是一个例子,这可能就是它不那么清楚的原因。
  • 你只有一次增加了 150——前两次增加了 250,所以很混乱。同样,这是非常简单的数学。做两列数字,你就可以解决它。或者你可以让某人在这里解决它,但实际上,不要为此这样做。锻炼你的大脑;你会很高兴你做到了。

标签: java if-statement calculator


【解决方案1】:

如果成本权重遵循一个公式,您应该使用它来计算成本(一点代数永远不会伤害任何人)。

如果成本分配的权重是任意的,您可以创建一个NavigableMap,使用权重作为键,成本作为值。

然后您可以使用NavigableMap&lt;K, V&gt;.lowerEntry(K) 找到低于给定权重的最高权重。

例子

public static Integer findCost(Integer weight, 
        NavigableMap<Integer, Integer> costMap){
    Map.Entry<Integer, Integer> cost;
    cost = costMap.lowerEntry(weight);
    if(cost == null){
        cost = costMap.firstEntry();
    }
    return cost.getValue();
}

使用地图的好处是,如果您使用TreeMap 作为NavigableMap 的实现,那么您的查找平均为 O(log n)。

【讨论】:

    【解决方案2】:

    首先,您需要一个公式或表格来计算运费。例如,“运费是每整十磅重一美元”。

    然后,您将权重放入该公式中。

    System.out.println("Shipping cost is $" + (int)(weight/10));
    

    如果你想让公式更复杂,你可以这样做:

    if (weight < threshold1) // price is first level
    // or, if you like, you can even do a calculation here
    else if (weight < threshold2) // price is second level
    

    用户可以在哪里定义threshold1threshold2的值变量

    这些级别的数量可以不限:

    // "thresholds" is a sorted array of the weights at which prices change
    int[] thresholds = new int[num_thresholds];
    for (int checking = 0; checking < thresholds.length; checking++) {
        if (weight < thresholds[checking]) // price is prices[checking]
    }
    

    欢迎来到计算机编程的美妙世界!

    【讨论】:

    • +1 抱歉,还不能投票。感谢您的欢迎和回答。
    • @Borealid,关于无限数量的级别。我不太明白你的方法。你能解释一下吗?如果必须设置[num_thresholds],它怎么可能是无限的。如果重量没有限制呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 2010-11-28
    • 2014-07-04
    • 1970-01-01
    • 2014-08-04
    相关资源
    最近更新 更多