Сопоставление целого ряда положительных целых чисел с диапазоном inidices

В принципе, мне нужна некоторая функция отображения, которая должна отображать целое число (0 - N) в индекс (0 - M). Для N = 10, M = 3 функция должна отображать: 1 → 0, 2 → 1, 3 → 2, 4 → 3, 5 → 0, 6 → 1, 7 → 2, 8 → 3, 9 → 0 и 10 → 1.

Мой мозг довольно мёртв, поэтому я попал в список бычков * & ^% :)

public int getIndexForNumber(int number, int maxIndex) {
 int max = maxIndex;
 while (maxIndex > 0) {
 if (number % maxIndex-- == 0) {
 return maxIndex;
 }
 }
 return max;
}

Может ли кто-нибудь направить меня?

2 ответа

Почему бы просто не вернуть остаток?

public int getIndexForNumber(int number, int maxIndex) {
 return (number - 1) % maxIndex; 
}

если допустимы отрицательные числа

public int getIndexForNumber(int number, int maxIndex) {
 int x = (number - 1) % maxIndex; 

 if (x < 0)
 x += maxIndex;

 retrun x; 
}


В функции сопоставления есть шаблон, состоящий в том, что число n отображается в (n-1) mod (m + 1). Используя это, вы можете написать функцию как:

public int getIndexForNumber(int number, int maxIndex) {
 return (number - 1) % (maxIndex + 1);
}

licensed under cc by-sa 3.0 with attribution.