0

私が最初のJavaクラスに課した課題の一部は、文字列として入力された時間を取り、それを(最も近い15分に丸めながら)倍精度に変換し、配列に格納することです。私が苦労している部分は、String クラスの split メソッドから受け取った 2 つの整数をどうするかということです。配列で使用するために、2 つの整数を 1 つの double にするにはどうすればよいですか? (つまり、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;

その場合、最も近い 15 分を把握するために if-else ツリーは必要ありません。

15 分は 15 分で、15 分は 0.25 時間です。上記の式を使用すると、分を 15 分の 1 時間 (0 ~ 4) に分割し、これに 15 分の 1 時間を掛けます。次に、それを取得した時間に追加します。

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

条件は OR ではなく AND にする必要があります。

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

など、またはさらに良いことに、単一のステートメント、単純に

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

これは、論理ではなく算術を使用して丸めを計算します。

于 2013-03-11T01:53:33.163 に答える