在拉赫马尼亚(Rahmania)的国家,邮寄信件的费用为40西纳(s),最多30克。在30克到50克之间,它是55个鼻窦。在50克到100克之间,它是70个鼻窦。超过100克,每增加50克(或其中一部分)需要70西纳加额外25西纳斯。例如,101克将花费70 + 25 = 95个sinas。 149克也将花费95西纳斯,因为这两种包装仅使用前100克超过100克。编写一个程序,提示用户提供质量,然后给出邮寄具有该质量的信件的费用。
这是一个问题,而我唯一不知道该怎么办的部分是最后一部分,每增加50克就增加25个sinas。
有人可以告诉我如何编写这部分代码吗?
我使用netbeans btw。
Scanner input = new Scanner(System.in);
double l;
l = input.nextInt();
x = l >= 100 / 50 * 25 + 70;
if (l <= 30) {
System.out.println("40 Sinas");
}
if (l > 30 && l < 50) {
System.out.println("55 Sinas");
}
if (l > 50 && l < 100) {
System.out.println("70 Sinas");
}
if (l >= 100) {
System.out.println("");
}
这是代码的重要部分。如你所见,我在最后一部分需要帮助。
答案 0 :(得分:0)
解决方案:
Scanner input = new Scanner(System.in);
int l; // it should be int if read int
l = input.nextInt();
if (l <= 30) {
System.out.println("40 Sinas");
}
if (l > 30 && l < 50) {
System.out.println("55 Sinas");
}
if (l > 50 && l < 100) {
System.out.println("70 Sinas");
}
if (l >= 100) {
System.out.println(((((l - 100) / 50) + 1) * 25) + 70);
}
答案 1 :(得分:0)
我只是想指出,Krayo的解决方案存在一个主要问题。如果重量值恰好为100,那么使用该计算,您实际上将向客户收取额外的25个sinas。这是由计算的+ 1
部分引起的。
如果weight
为100,则100以上50克间隔的数量为0(weight - 100 = 0
)。因此,客户不应该收取任何费用,因为问题的措辞是超过100克...... 。但是,因为您在执行额外费用计算之前添加了1,所以客户不必要地额外收取25个Sinas。
相反,为了确保正确的金额以及所有其他情况,我会改用Math.ceil(double)方法。此方法将值舍入到最接近的整数。例如,5.2变为6.0,5.0仍为5.0。
所以你的计算看起来就像这样:
int cost = (int) (Math.ceil((weight - 100) / 50.0f) * 25) + 70;
请注意,我们需要使用浮点值来确保最终得到小数值。由于Math.ceil
返回一个double,我们只需将其强制转换为整数。
这是一个示例程序来证明这一点:
public class CalculationTesting {
public static void main(String[] args){
int weight = 100;
int good_cost = (int) (Math.ceil((weight - 100) / 50.0f) * 25) + 70;
int bad_cost = ((((weight - 100) / 50) + 1) * 25) + 70;
System.out.println("Weight = " + weight + "g");
System.out.println("Good cost calculation = $" + good_cost);
System.out.println("Bad cost calculation = $" + bad_cost);
}
}
您可以将weight
值更改为实验。
哪个输出:
重量= 100g
良好的成本计算= 70美元 不良成本计算= 95美元