-2

我有一个计算机科学课程的程序,如果停放的汽车超过 60 分钟,我必须为停放的汽车开票。类方法作为一个参数,然后应该给第一个小时的基本罚款,再加上每多停一个小时的 10 美元ParkingTicket。假设我总共停了 150 分钟,那么我的车票将是 35 美元(第一小时 25 美元,第二小时 10 美元,其余 30 分钟不罚款)。calculateFine()minutes

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

谢谢您的帮助!

4

4 回答 4

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;
于 2013-04-22T02:40:51.527 回答
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 攻击。切勿将循环用于简单的数学问题。

于 2013-04-22T02:37:25.953 回答
0

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

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

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

于 2013-04-22T02:41:38.977 回答
-1

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

于 2013-04-22T02:36:44.757 回答