我对初始Java类的一项任务的一部分是将一个时间作为字符串输入并将其转换(在舍入到最接近的四分之一小时时)到一个double并将其存储在一个数组中。我遇到困难的部分是如何处理我从String类的split方法收到的两个整数。如何将两个整数组合成一个双精度才能在数组中使用? (所以它会像小时。分钟,或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;
}
答案 0 :(得分:2)
我认为诀窍是在这里使用一些数学。您可以随时执行以下操作:
double convertedTimeOut = Math.round(minutes / 15.0) * 0.25 + hours;
然后你不需要if-else树来计算最接近的四分之一小时。
一刻钟有15分钟,四分之一小时为0.25小时。使用上面的公式,您将分钟数除以您获得的小时数(0-4),然后乘以一小时内的小时数。然后将其添加到您已经达到的时间。
Math.round
只为您进行四舍五入。
答案 1 :(得分:1)
我猜你最麻烦的是如何处理分钟。试试这个:
double minutesAsDecimal = 0.01 * minutes;
因此,如果分钟数是24,那么最终会得到0.24。我打赌你会知道从哪里去。
正如旁注,你的if和else ifs没有做你认为的那样。但是因为它是家庭作业..请仔细看看那里的逻辑。
答案 2 :(得分:0)
您的条件应该是AND而不是OR:
if(minutes >= 8 && minutes <= 22)
等等,或者更好的是,单个陈述,只需
minutes = ((minutes + 7) % 15) * 15;
使用算术而不是逻辑来计算舍入。