Вам нужно использовать индекс, который ограничен размером массива. Точнее, и эзотерически, вам нужно сопоставить итерации for-loop {0..9} с действительными индексами для массива пламени {0 .. flames.length()-1
}, которые в этом случае совпадают с {0. 0,5}.
Когда цикл повторяется от 0 до 5, отображение тривиально. Когда цикл повторяется в 6-й раз, вам нужно сопоставить его обратно с индексом массива 0, когда он итерации до седьмого раза, вы сопоставляете его с индексом массива 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()
является инвариантом, который вы двигаетесь из за петлю ,
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));
}
При работе с проблемами, как это, думать о функциональных отображениях из домена (в данном случае, для итераций цикла) для Диапазон (действительные индексы массива).
Что еще более важно, проработайте его на бумаге, прежде чем вы даже начнете код. Это займёт вам долгий путь к решению этих типов элементарных проблем.
использовать '%' при доступе к 'flames []' like ... 'flames [z% flames.length()];' –
использовать оператор mod (%) в выражении индекса: 'res = flames [z % flames.length()]; 'Или еще лучше иметь переменную * инварианта * n = flames.length()' непосредственно за пределами цикла for, а затем иметь 'res = flames [z% n];' –
@ luis.espinal: Разве компилятор не сделает это для нас? 'flames.length()' в цикле будет оптимизирован правым компилятором/не так ли? –