将整数序列映射为重复序列

时间:2011-02-07 12:50:29

标签: java

我有一个连续的,有序的整数序列,它从零开始并高于零;例如...,-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语句?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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 :(得分: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;
}