您需要使用受限于数组大小的索引。更准确地说,更深奥地说,您需要将 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));
}
在处理此类问题时,请考虑从域(在本例中为 for 循环迭代)到范围(有效数组索引)的函数映射。
更重要的是,在你开始编码之前,把它写在纸上。这将使您在解决这些类型的基本问题方面走得很远。