尽管表大于索引,但表索引超出范围
Posted
技术标签:
【中文标题】尽管表大于索引,但表索引超出范围【英文标题】:Table index out of bounds allthough the table is bigger than the index 【发布时间】:2020-09-28 09:32:03 【问题描述】:我正在开发一个简单的匹配游戏,我想输出一个排行榜,但我得到一个异常数组索引超出范围。在调试中,虽然它说表的大小是 3,并且 i 和 j 都是 0 和 1,这对我来说很奇怪,因为数组大小为 3,这并没有超出范围。这是我对数组进行排序的代码按高分从大到小排列对象,感谢您的帮助。
for(int i = 0; i<tabUporabnikov.Length-1; i++)
for(int j = (i+1); j<tabUporabnikov.Length; j++)
if (tabUporabnikov[i].highscore < tabUporabnikov[j].highscore)
Uporabnik[] zacasna = new Uporabnik[1];
zacasna[1] = tabUporabnikov[j];
tabUporabnikov[j] = tabUporabnikov[i];
tabUporabnikov[i] = zacasna[1];
【问题讨论】:
我假设zacasna
有 0 或 1 个项目的空间。
您正在尝试设置zacasna[1]
,即使您刚刚使用一个元素创建了它。不过,目前还不清楚为什么要在那里创建一个数组。为什么不只是一个局部变量Uporabnik tmp = tabUporabnikov[j];
? (然后将tabUporabnikov[i] = tmp;
设置为块中的最后一行)。
应该是zacasna[0]
。最好声明一个变量而不是数组
另外请注意,.NET 中有内置的排序方法 - 除非您的目标是了解如何实现排序,否则我建议使用 Array.Sort
或 LINQ。
是的,我尝试使用 System.Linq,但在将其嵌入环境时遇到了问题。我还不知道该怎么做,因为当我尝试它时它会崩溃我所有的文件,我不得不从我的备份重新开始。
【参考方案1】:
应该是zacasna[0]
。在这种情况下,数组只能有一个值,数组从索引 0 开始。所以它应该是zacasna[0]
。最好声明一个变量而不是数组,因为您只需要存储值。声明为Uporabnik zacasna
【讨论】:
感谢您解决了我的问题。起初我什至不知道为什么它解决了它,但现在我明白为什么了。以上是关于尽管表大于索引,但表索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章