如何基于60分钟的间隔添加罚款?

时间:2013-04-22 02:33:10

标签: java

我有一个计算机科学课程,如果他们停放超过60分钟,我必须在停车场上车。 ParkingTicketcalculateFine()方法将minutes作为参数,然后应该在第一个小时给出基本罚款,并且每停放一个额外小时加10美元。如果我停车总共150分钟,我的机票将是35美元(第一个小时25美元,第二个小时10美元,其余30分钟没有罚款)。

我想到的是使用if(minutes%60)检查分钟是否可被60整除,但后来我不知道如何让程序检查它可分割的TIMES数量减去前60分钟。现在我想到了,这意味着如果minutes不能被60整除,那就错了,这意味着它根本不会执行......

感谢您的帮助!

4 个答案:

答案 0 :(得分:2)

只需计算分钟数即可。如果小时数> 0,那么罚款只是一个简单的计算。

final int BASE_FINE = 25;
final int HOURLY_FINE = 10;

int fine = 0;
int hours = minutes / 60;

if (hours > 0)
    fine = BASE_FINE + (HOURLY_FINE * (hours - 1));

return fine;

答案 1 :(得分:1)

在适当的变量声明之后尝试这个,当然:

fine = 0;
if (minutes > 60) /* did you mean more than 60 like you said, or >= 60? */
{
fine = 25;
minutes -= 60;
fine += 10*Math.floor(minutes/60);
}

这是一种更明确的方法来分解它:

fine = 0;
hours = Math.floor(minutes/60); /* automatically ignores extra minutes */
if (hours >= 1) {
fine += 25; /* charge $25 fine for the first hour */
}
if (hours >= 2) {
fine += 10*(hours-1); /* charge $10 fine per hour for subsequent hours */
}

你绝对不应该使用循环。通过向程序轻松提交大整数,可以使程序暴露于DOS攻击。永远不要使用循环来解决简单的数学问题。

答案 2 :(得分:0)

你有覆盖循环了吗?如果是这样,请考虑使用while循环,如下所示:

while(minutesParked >= 60) {
    fine += 10;
    minutesParked -= 60;
}

如果minutesParked大于或等于60分钟,我们加罚款10美元并减去我们刚刚从minutesParked计算的60分钟。此循环继续执行,直到剩余时间少于60分钟,根据您的帖子没有罚款。

答案 3 :(得分:-1)

一种简单的方法是从总分钟中减去初始值60,然后将25添加到运行总和,然后执行一个while循环,从总计中减去60,直到它小于0,同时更新运行总计。