2009-06-27 6 views
2

配列内に3色あるarray('blue', 'red', 'green')があり、私のループでは青、赤、緑、青、赤、緑を印刷したいと考えています。数字をとって1-3の間で数字を得る方法

私は3ループごとにカウンタをリセットして、それを使って1、2、3、リセット、1,2,3、リセットなどの色を見つけることができます。 5、7のように現在のループ数を渡して2を得る方法はありますか?または6または9を渡して3を得る?私はこれにいくつかの簡単な数学的解決法が欠けていますか?

+0

あなたがいない、0,1,2,0,1,2をしたいですか? – Nosredna

答えて

13

あなたが探しているのはモジュロ演算子 '%'です。

arrayIndex = loopCount % 3; 

は、基本的に、これは3で数を分割し、私に残りを与える意味...ので、等しくう0 1 2 0 1 2 0 1 2、等...

EDIT:

あなたが行うことができます1の配列インデックスを開始した言語を使用している場合:

arrayIndex = loopCount % 3 + 1; 
+0

これは正しいです、私は以下の "+1"の答えに嘘をつきました。 – DreadPirateShawn

1

使用モジュラー算術演算、5 MOD 3 = 2、など6 MOD 3 = 0、7 MOD 3 = 1を、 ..あなたのリストが0の代わりに1ベースの場合は1を加えます。

EDIT:モジュロ演算子は、使用している言語によって異なる場合があります。 Wikipediaにはそのほとんどが記載されています。

2

数学が関係していると思われるようです。

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

あなたが使用している言語やプラットフォームを指定していないため、C#で書かれています。

2

"mod"が必要です。

あなたがループカウントがゼロで起動した場合、これは意味します:

を(loopcountに%3)+ 1

1

取得するための配列[、 '青' '赤'、 'グリーン'] を与えられましたあなたが欲しいものを、ここで

array[number mod 3] 
1

を行うには、作業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]); 
     } 
    } 
} 
2

代わりの解像度カウンタを設定すると、現在のカウントを配列の要素の合計数で割った余りを計算できます(つまり、mod関数を使用します)。例えば

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

for (i = 0; i < 100; i++) 
     printf("%s\n", colors[i % 3]); 
関連する問題