私は、0より小さく開始して0より大きくなる整数の連続した順序付きシーケンスを持っています。たとえば...,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7
です。私はこれらを繰り返しシーケンス3,6,9,12
にマップする必要があります。初期条件はf(0)=3
です。したがって、例えばf(-2)=9, f(-1)=12, f(0)=3, f(1)=6, f(2)=9, f(3)=12, f(4)=3
のように。 Javaでこの操作を表現するコンパクトな方法があるので、剰余演算子(%)を使用してif/else文を避けることができますか?整数のシーケンスを繰り返しシーケンスにマップする
0
A
答えて
1
私は否定的に処理するために以下のことをお勧めします数字。
public int f(int n, int ... sequence) {
int idx = n % sequence.length;
if (idx < 0) idx += sequence.length;
return sequence[idx];
}
int x = f(n, 3,6,9,12);
しかし、この特定の例でははるかに簡単な解決策があります。)
public int f(int n) {
return (n & 3) * 3 + 3;
}
+0
ありがとう、私は最後に非常に単純な解決法が好きです。正と負の数。 – Abiel
+0
私は、3つの3のは、予想される解決策の種類だと思う。 –
1
int repeatingSequence[] = { 3,6,9,12 };
int fZero = 0;
int len = repeatingSequence.length;
public int f(int n) {
return repeatingSequence[ (n % len + fZero + len) % len ];
}
初期マッピング条件としてポジティブ、ネガティブ、およびすべてのfZeroで機能します。
2
これは、サーバあなたの目的になります。
int repeatInt = 12 - ((11 - seqInt)*3) % 12 ;
where repeatInt = 3,9,6 or 12, the output
and seqInt = a number from your sequence
(私はPHPのコードを試してみました、およびJavaにそれを変更し、任意の文法ミスのために私を許して)
は私には宿題のように聞こえます。それは...ですか? –
Sean - いいえ、ちょうど私が日付計算を含むアプリケーションでやらなければならないことです。 – Abiel