C#循环字符串数组错误
好吧,我被这个弄糊涂了,我有:一个int变量,一个字符串数组和一条语句。它非常标准的循环数组结构C#循环字符串数组错误,c#,C#,好吧,我被这个弄糊涂了,我有:一个int变量,一个字符串数组和一条语句。它非常标准的循环数组结构 public class Form1 : System.Windows.Forms.Form { public int ticker = 0; public string[] pictureArray = new String[] { "image01.jpg", "image02.jpg", "image03
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]);
公共类表单1:System.Windows.Forms.Form
{
公共int-ticker=0;
公共字符串[]pictureArray=新字符串[]{
“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”
};
...
如果(this.ticker<21)
{
这个.ticker++;
}
其他的
{
this.ticker=0;
}
MessageBox.Show(picturearlay[ticker]);
它运行良好,直到ticker>21,然后崩溃并声明IndexOutfrange,但如果我说将MessageBox更改为只打印ticker,它很好,我没有错误。现在我已经查看了类似的问题,但问题是我是一名PHP程序员,我不确定其中一些问题的答案是否与我的情况有关
如果没有任何帮助,我将不胜感激。如果没有,我想我这里有所有相关信息。但在它开始回收阵列并再次运行阵列之前,一切都正常。我只是感到困惑。如果ticker=20,请单击它直到21 然后尝试在位置21处索引一个基于0的21元素数组 您的if应该是
ticker<20
编辑-
哈,看起来虽然这可以解决你的索引问题,但乔恩的答案是正确的
这很有趣。您缺少
image08.jpg
,这意味着您的数组中只有21个条目,而不是22个。因此当ticker
为21时,您将得到一个异常
使其更加健壮的一种方法是使用:
if (ticker < pictureArray.Length - 1)
{
ticker++;
}
else
{
ticker = 0;
}
诚然,在这种情况下,这会导致您错过我怀疑的真正问题-您没有获得您期望的所有图像。将其更改为:
MessageBox.Show(pictureArray[ticker]);
ticker++;
if (ticker >= pictureArray.Length)
{
ticker = 0;
}
这样,如果您更改pictureArray的大小,它也会适应。问题是您根本没有读取索引0。首先,您在读取第一个元素之前递增
This.ticker
。在每个数组位置显示字符串的值之后,您应该递增
因此,最终的结果是将索引设置为
21
而不是20
,因此indexootfrangeexception
实际上有21个项目缺少image08.jpg!!因此,您应该将条件更改为<20。或者一般来说BrandonS,您的代码很小,但结果很差。
您的代码流程:
首先,您要检查ticker的值
如果较小,则递增为1,否则为0
打印数组的值
所以,
公共字符串[]pictureArray=新字符串[]{“image01.jpg”,“image02.jpg”};//2的数组
ticker = 0
if (ticker < 2)
ticker++; // STEP 1
else
ticker = 0;
MessageBox.Show(pictureArray[ticker]); // STEP 2
ticker Image Shown
0 image02.jpg
1 image03.jpg ?????
ticker=0
如果(股票代码<2)
ticker++;//步骤1
其他的
股票代码=0;
MessageBox.Show(picturearlay[ticker]);//步骤2
显示股票代码图像
0 image02.jpg
1 image03.jpg?????
检查后,您将递增,然后再递减,因此显示的值已经比股票代码早1。
计算它们的方法不同:-可以将if子句(ticker<21)替换为(ticker
string[] pictureArray = new String[] {"image01.jpg","image02.jpg};
int ticker = 0;
do
{
if (ticker < pictureArray.Length - 1)
ticker++;
else
ticker = 0;
Console.WriteLine("Ticker = " + ticker + " Image = " + pictureArray[ticker]);
} while (true);
Results :
Ticker = 1 Image = image02.jpg
Ticker = 0 Image = image01.jpg
Ticker = 1 Image = image02.jpg
Ticker = 0 Image = image01.jpg
string[]picturarray=新字符串[]{“image01.jpg”,“image02.jpg};
int-ticker=0;
做
{
如果(股票代码
以下显示语句的结果与上述相同:
如果(股票代码==0)
Console.WriteLine(“Ticker=“+Ticker+”Image=“+pictureArray[0]);
其他的
Console.WriteLine(“Ticker=“+Ticker+”Image=“+pictureArray[Ticker])
如果您可以先显示,然后递增,或者在递增之前,将其值保存在其他变量中,并使用该变量来显示结果最好的变量,而不是上面的变量
int displayTicker = 0;
if (ticker < 2) {
displayTicker =ticker;
ticker++;
} else {
displayTicker = ticker = 0;
}
MessageBox.Show (pictureArray[displayTicker]);
int displayTicker=0;
如果(股票代码<2){
displayTicker=ticker;
ticker++;
}否则{
displayTicker=ticker=0;
}
Show(picturearlay[displayTicker]);
我相信这个选择是最好的。在这种情况下,最好有两个VAR,而不是保留一个并检查它
希望这有帮助。this.ticker
从哪里来?另外,当你声明自己是一名PHP程序员时,我相信答案就在眼前。数组从0到max items开始索引。因此如果你读取max items+1,那么如果你读max items+1(例如,this.ticker
),然后您会得到一个IndexOutfrange异常。当抛出异常时,将其更改为ticker
的值是多少?它是从pictureArray[ticker]抛出的吗
line?我觉得这段代码很好。@Brad-ticker
是表单中的一个字段。请看类的顶部。@Jakub:用手数一数。其中有21项已编入索引
string[] pictureArray = new String[] {"image01.jpg","image02.jpg};
int ticker = 0;
do
{
if (ticker < pictureArray.Length - 1)
ticker++;
else
ticker = 0;
Console.WriteLine("Ticker = " + ticker + " Image = " + pictureArray[ticker]);
} while (true);
Results :
Ticker = 1 Image = image02.jpg
Ticker = 0 Image = image01.jpg
Ticker = 1 Image = image02.jpg
Ticker = 0 Image = image01.jpg
int displayTicker = 0;
if (ticker < 2) {
displayTicker =ticker;
ticker++;
} else {
displayTicker = ticker = 0;
}
MessageBox.Show (pictureArray[displayTicker]);