簡體   English   中英

將整數序列映射為重復序列

[英]Map sequence of integers into repeating sequence

我有一個連續的,有序的整數序列,這些整數從小於零開始到大於零。 例如...,-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語句?

這將達到您的目的:

    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)

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作為初始映射條件。

我建議以下處理負數。

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM