1

各平日が整数にマップされる、平日の範囲を反復しようとしています(Sunday = 1, Monday = 2, ..., Saturday = 7)

範囲は によって定義されますstart and end day。これは、次のような開始日と終了日Monday(2) - Thursday(5)には問題ありません。

for(int i = startDay; i <= endDay; i++) { ... } 

のように、範囲が週の終わりと始まりに分割されている場合、私は問題を抱えていFriday(6) - Monday(2)ます。これは明らかに上記の for ループでは機能しません - 例えば

for(int i = 6; i <= 2; i++) { ... }    // wouldn't even execute once. 

私が見ることができる唯一の解決策は、ある種の循環バッファーを実装することです。これは、このような単純な問題にはやり過ぎだと感じています。私はただ困惑しており、おそらくここで明らかな何かを見逃しています。解決策は剰余算術と関係があると思いますが、よくわかりません。

4

4 に答える 4

0

Java 8 では:

// input section
DayOfWeek start = DayOfWeek.FRIDAY;
DayOfWeek end = DayOfWeek.MONDAY;

// execution section
DayOfWeek dow = start;
DayOfWeek stop = end.plus(1);

do {
  // ... your code
  dow = dow.plus(1);
} while (dow != stop);

do-while-construction により、条件start == endに対してループが少なくとも 1 回実行されることが保証されます。

ローカライズされたインデックスの使用による更新 (日曜日 = 7 ではなく 1)

この方法で、インデックスをDayOfWeek-objectsに変換できます。

private static DayOfWeek convert(int localIndex) {
  int iso = localIndex - 1;
  if (iso == 0) {
    iso = 7;
  }
  return DayOfWeek.of(iso);
}
于 2014-04-17T16:03:23.353 に答える
0

何らかの循環のために % 演算子を使用できます

 for (int i=6; i!=2; i=(i+1)%7) { ... }

これは 0 から日をインデックス化するので、日曜日 = 0 ... 土曜日 = 6 になります。本当にインデックスを 1 から開始したい場合は、解釈の問題だけです。たとえば、次のことができます。

 for (int i=6; i!=2; i=(i+1)%7) { 
     int day=i+1; 
     // use day here
 }
于 2014-04-17T15:44:35.493 に答える