0

ユーザーが実行する一定量の「ユニット」を自動的に生成するJavaプログラムを作成しています(この質問では実際の目的は重要ではありません)。

これらの「単位」のうち、ユーザーに次の週にいくつ与えるかを決定する良い方法を見つけるのに苦労しています。

計算の意図:

  • 特定の週の「単位」を与える
  • 実際の曜日 (月~金) に基づいて週の単位を計算します。
  • その月のすべての単位を計算します (例: 月の最終週の場合、その週全体のすべての可能な単位を指定します)。
  • 見積もる場合は、過大評価する必要があります(プログラムの性質上、過小評価ははるかに悪いでしょう.)
  • 単位を小数にすることはできません (したがって、int にキャストされます)

私が持っている変数:

  • その月にやるべき「単位」の量

私はこれをいくつかの異なる方法で実行しようとしましたが、これまでのところ、私が持っている最良の方法は次のとおりです。

 public static int getRemainingUnitsThisWeek() {
    return (int) Math.round(((double) getUnitsThisMonth() / (((30 - (double) DateTime.now().getDayOfMonth()+1) / 7) < 1 ? 1 :
            ((30 - (double) DateTime.now().getDayOfMonth()+1) / 7))) / (double)DateTime.now().getDayOfWeek());
 }

私が最終的に直面する問題 (具体的には、それがどのように行われるかについてはまだ満足していません) は、月の最終週に指定された「単位」がまだ曜日で分割されていることです (どの順番でユーザーは月末までにすべての「ユニット」を受け取る必要がありますが)。

ご不明な点がございましたら、お気軽にお尋ねください。

PS。DateTime.now() 関数で使用しているライブラリはjoda-timeです。

4

2 に答える 2

0

あなたの説明は紛らわしいので、直接答えられるかどうかわかりません。代わりに、役立つかもしれない別の質問に答えます。

やらなければならない単元がたくさんあり、残りの月はそれをやります。今日は何回やればいいですか?

Joda についてはわかりませんが、標準DateAPI を使用すると、この回答を使用して月末を表す を取得できますDate。同様の手法Dateで今日の終わりを表すnew Date()を取得し、現在の時刻を取得できます。次に、それらの s を引きますgetTime()。これで、1 日の終わりと月末までのミリ秒数がわかったので、単位を割り当てることができます。

units_today = total_units_to_do * milliseconds_to_end_of_today /
  milliseconds_to_end_of_month;
于 2012-08-29T04:20:55.153 に答える
0

私は Java を知らないので、コードを書くつもりはありませんが、 と を計算することから始めることをお勧めしdaysLeftInMonthますdaysLeftInWeek。これらが完全に機能するようになると、単純なケースが 2 つあります。1 週間が終わる前に 1 か月が終わるか、そうでないかのどちらかです。

最初のケースでは、残りのアルゴリズムは自明です。次に、1 日あたりのユニット数を計算し (切り上げ)、その週の残りの日数を掛けます。

于 2012-08-29T04:22:16.990 に答える