使用list c#时索引超出范围异常

时间:2014-02-17 08:19:04

标签: c# list loops

我在这里面临一个问题,我需要你的帮助.. 当我在c#...

上使用列表时,我的索引超出了范围异常 抱歉我的英语不好......

代码基本上是根据我拥有的数组创建一个区域。 数组由1和0组成,所谓的区域就是当你有一组1时。 并且通过使用差异来判断它的区域是否是,如果[i] - [i - 1] = 0那么它被称为区域的初始位置,当差异为-1时则它是区域的结束... 这是获得异常的代码

for (int i = 1; i < histogramplatakhir.Length - 1; i++)
{
    different = histogramplatakhir[i] - histogramplatakhir[i - 1];
    if (different == 0 && histogramplatakhir[i] == 1)              //logika untuk menghitung luas region    
    {
        area_region[count_region]++;
        if (state_awal == true) { pos_awal.Add(i); state_awal = false; }
    }
    else if (different == -1) { pos_akhir.Add(i); count_region++; state_awal = true; }
    else if (i == histogramplatakhir.Length - 1 && different == 0) { pos_akhir.Add(i); }
}

for (int i = 0; i < pos_awal.Count; i++)
{
    awalhuruf = pos_awal[i];
    lebarhuruf = pos_akhir[i] - pos_awal[i];
    Crop crophuruf = new Crop(new Rectangle(awalhuruf - 5, 0, lebarhuruf + 10, image.Height));
    Karakter karakter = new Karakter(crophuruf.Apply(image));
    listCiriKarakter.Add(karakter.CiriKarakter);
}

似乎我在这一行得到了例外

lebarhuruf = pos_akhir[i] - pos_awal[i];

当我检查计数时,似乎pos_awal得到了4个计数,而pos_akhir得到了3个计数 当它试图减去时,它会变得异常,因为没有第4个pos_akhir

我无法弄清楚如何解决这个问题......

提前感谢您的帮助

2 个答案:

答案 0 :(得分:1)

看起来构建列表的if语句并不涵盖所有场景。 different能否为正面? ((different == 0) && (histogramplatakhir[i] != 1 && i != histogramplatakhir.Length - 1)可以吗?您总是可以在最后添加“else”语句,以确保涵盖任何其他方案,但我无法确定您需要将其添加到哪个列表。

答案 1 :(得分:0)

如果计数器超出数组范围,则在减号前使用默认值pos_akhir,这会导致异常

lebarhuruf = (i < 3 ? pos_akhir[i] ? 0 ) - pos_awal[i]; // if pos_akhir[i] is int