我在这里面临一个问题,我需要你的帮助.. 当我在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
我无法弄清楚如何解决这个问题......
提前感谢您的帮助
答案 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