0

我对 Java 入门类的部分作业是花时间作为字符串输入,并将其转换(同时舍入到最接近的一刻钟)为双精度,并将其存储在一个数组中。我遇到困难的部分是如何处理从 String 类的 split 方法收到的两个整数。如何将两个整数变成一个双精度以在数组中使用?(所以它就像 hours.minutes 或 5.25)这是我正在处理的程序中的一段代码:

    public static double convertClockOutTimes(String clockOut){
    double convertedTimeOut = 0;
    String time = clockOut;
    int hours;
    int minutes;
    String[]splitFields;
    splitFields = time.split(":");
    hours = Integer.parseInt(splitFields[0]);
    minutes = Integer.parseInt(splitFields[1]);
    if (minutes <= 7)
    {
        minutes = 0;
    }
    else if (minutes >= 8 || minutes <= 22)
    {
        minutes = 15;
    }
    else if (minutes >= 23 || minutes <= 37)
    {
        minutes = 30;
    }
    else if (minutes >= 31 || minutes <= 53)
    {
        minutes = 45;
    }
    else
    minutes = 0;
    hours = hours + 1;

    convertedTimeOut = //This is where I don't know what to do!!


   return convertedTimeOut;
    }
4

3 回答 3

2

我认为诀窍是在这里使用一些数学。您始终可以执行以下操作:

double convertedTimeOut = Math.round(minutes / 15.0) * 0.25 + hours;

那么你不需要 if-else 树来计算最近的一刻钟。

一刻钟有 15 分钟,一刻钟等于 0.25 小时。使用上面的公式,您将分钟除以您有多少刻钟(0-4),然后乘以刻钟的小时数。然后将其添加到您拥有的时间中。

Math.round只是为你做四舍五入。

于 2013-03-11T01:51:20.077 回答
1

我猜最让你烦恼的是如何处理会议记录。尝试这个:

double minutesAsDecimal = 0.01 * minutes;

所以如果分钟数是 24,你最终会得到 0.24。我打赌你会知道从那里去哪里。

顺便说一句,你的 if 和 else if 并没有像你想象的那样做。但既然是家庭作业..只要仔细看看你的逻辑。

于 2013-03-11T01:44:56.233 回答
0

您的条件应该是 AND 而不是 OR:

if(minutes >= 8 && minutes <= 22)

等等,或者更好的是,一个单一的陈述,简单地

minutes = ((minutes + 7) % 15) * 15;

它使用算术而不是逻辑计算舍入。

于 2013-03-11T01:53:33.163 回答