配列のサイズに制限されたインデックスを使用する必要があります。より正確に、難解に言えば、for ループの反復 {0..9} をフレーム配列 {0.. flames.length()-1
} の有効なインデックスにマッピングする必要があります。この場合、これらは {0.. 5}。
ループが 0 から 5 まで繰り返される場合、マッピングは自明です。ループが 6 回繰り返される場合は、配列インデックス 0 にマップし直す必要があり、7 回目に反復する場合は配列インデックス 1 にマップする必要があります。
== 素朴な方法 ==
for(int z = 0, j = 0; z < ctr-1; z++, j++)
{
if ( j >= flames.length() )
{
j = 0; // reset back to the beginning
}
res = (flames[j]);
jLabel1.setText(String.valueOf(res));
}
== より適切な方法 ==
flames.length()
次に、 for ループの外に移動する不変条件を実現することで、これを改善できます。
final int n = flames.length();
for(int z = 0, j = 0; z < ctr-1; z++, j++)
{
if ( j >= n )
{
j = 0; // reset back to the beginning
}
res = (flames[j]);
jLabel1.setText(String.valueOf(res));
}
== やり方 ==
さて、注意を払っていれば、インデックスに対して剰余算術を実行しているだけであることがわかります。したがって、モジュラー (%) 演算子を使用すると、コードを簡素化できます。
final int n = flames.length();
for(int z = 0; z < ctr-1; z++)
{
res = (flames[z % n]);
jLabel1.setText(String.valueOf(res));
}
このような問題に取り組むときは、Domain (この場合はループ反復用) から Range (有効な配列インデックス) への関数のマッピングについて考えてください。
さらに重要なことは、コーディングを開始する前に、紙の上で作業することです。それは、これらのタイプの基本的な問題を解決するための長い道のりです.