Как взять любой номер и получить номер между 1-3 - PullRequest
2 голосов
/ 27 июня 2009

У меня есть три цвета в массиве, array('blue', 'red', 'green'), и в моем цикле я хочу печатать синий, красный, зеленый, синий, красный, зеленый.

Я знаю, что мог бы просто сбрасывать счетчик каждые 3 цикла и использовать его, чтобы найти нужный мне цвет - 1, 2, 3, сброс, 1, 2, 3, сброс и т.д. передать ему текущий счетчик циклов, вроде 5 или 7, и получить 2? Или пройти 6 или 9 и получить 3? Я упускаю какое-то простое математическое решение для этого?

Ответы [ 7 ]

13 голосов
/ 27 июня 2009

Что вам нужно, так это оператор по модулю "%";

arrayIndex = loopCount % 3;

в основном это означает разделить число на 3 и дать мне остаток ... так что он будет равен 0 1 2 0 1 2 0 1 2 и т. Д. *

EDIT:

Если вы используете язык, который начинает индексы массива с 1, вы можете сделать:

arrayIndex = loopCount % 3 + 1;
2 голосов
/ 27 июня 2009

Вместо сброса счетчика вы можете вычислить остаток от деления текущего счетчика на общее количество элементов в вашем массиве (то есть использовать функцию мода).

Например,

int i;
char *colors[] = {"red", "green", "blue"};

for (i = 0; i < 100; i++)
        printf("%s\n", colors[i % 3]);
2 голосов
/ 27 июня 2009

Вы хотите "мод".

Если вы начнете подсчет циклов с нуля, это будет означать:

(loopCount% 3) + 1

2 голосов
/ 27 июня 2009

Вы, кажется, предполагаете, что математика вовлечена.

while (true) {
    foreach (var color in colors) {
        Console.WriteLine(color);
    }
}

Написано на C #, поскольку вы не указали, какой язык или платформу используете.

1 голос
/ 27 июня 2009

Вот рабочий пример C #:

using System;

class Program
{
    static void Main()
    {
        int iterations = 5;

        String[] colors
            = new String[] { "blue", "red", "green" };

        for (int i = 0; i < colors.Length * iterations; i++)
        {
            Console.WriteLine(colors[i % colors.Length]);
        }
    }
}
1 голос
/ 27 июня 2009

заданный массив ['blue', 'red', 'green'] чтобы получить то, что вы хотите, сделайте

array[number mod 3]
1 голос
/ 27 июня 2009

используйте модульную арифметику, 5 mod 3 = 2, 6 mod 3 = 0, 7 mod 3 = 1 и т.д.

РЕДАКТИРОВАТЬ: Оператор по модулю может отличаться в зависимости от того, какой язык вы используете. Википедия перечисляет большинство из них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...