好吧我对此感到困惑,我有:一个int变量一个字符串数组和一个所有应该的语句.它非常标准的循环阵列结构.
public class Form1 : System.Windows.Forms.Form
{
public int ticker = 0;
public string[] pictureArray = new String[] {
"image01.jpg",
"image02.jpg",
"image03.jpg",
"image04.jpg",
"image05.jpg",
"image06.jpg",
"image07.jpg",
"image09.jpg",
"image10.jpg",
"image11.jpg",
"image12.jpg",
"image13.jpg",
"image14.jpg",
"image15.jpg",
"image16.jpg",
"image17.jpg",
"image18.jpg",
"image19.jpg",
"image20.jpg",
"image21.jpg",
"image22.jpg"
};
...
if (this.ticker < 21)
{
this.ticker++;
}
else
{
this.ticker = 0;
}
MessageBox.Show(pictureArray[ticker]);
Run Code Online (Sandbox Code Playgroud)
它运行良好,直到自动收报机> 21然后它崩溃并说明IndexOutOfRange,但如果我要说改变MessageBox只是打印自动收报机它很好,我没有错误.现在我已经查看了类似的问题,但问题是我是一名PHP程序员,如果答案与我的情况有关,我不确定其中的一些.
任何帮助将不胜感激,我认为如果不是我道歉,我在这里有所有相关信息.但是一切都有效,直到它开始回收数组并再次运行数组.我只是感到困惑.
Jon*_*eet 12
你错过了image08.jpg,这意味着你的数组中只有21个条目,而不是22.因此当ticker21为21时,你会得到一个例外.
使其更加健壮的一种方法是使用:
if (ticker < pictureArray.Length - 1)
{
ticker++;
}
else
{
ticker = 0;
}
Run Code Online (Sandbox Code Playgroud)
或者有条件的:
ticker = ticker < pictureArray.Length - 1 ? ticker : 0;
Run Code Online (Sandbox Code Playgroud)
或者理查德的"无条件增量,条件重置".
或者可能有点简单:
ticker = (ticker + 1) % pictureArray.Length;
Run Code Online (Sandbox Code Playgroud)
不可否认,在这种情况下会导致您错过我怀疑的真正问题 - 您没有得到您期望拥有的所有图像.
| 归档时间: |
|
| 查看次数: |
197 次 |
| 最近记录: |