C#循环字符串数组错误

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

好吧,我被这个弄糊涂了,我有:一个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]);
公共类表单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]);