我正在创建一个计算运费的计算器。代码如下:
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制作这样一个计算器,无论重量多少,它都会适当地计算运费并给出答案。
如果是,那我该如何解决呢?
答案 0 :(得分:4)
首先,您需要一个公式或表来计算运费。例如,&#34;运费是每10磅体重1美元。
然后,你把重量放在那个公式中。
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
用户可以定义threshold1
和threshold2
变量的值。
这些级别可以有无限数量:
// "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 :(得分:1)
如果成本的权重遵循公式,你应该用它来计算成本(一点代数从不伤害任何人)。
如果权重与成本分配是任意的,您可以使用权重作为关键字来创建NavigableMap,并将费用作为值。
然后您可以使用NavigableMap<K, V>.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)。