【问题标题】: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,但在将其嵌入环境时遇到了问题。我还不知道该怎么做,因为当我尝试它时它会崩溃我所有的文件,我不得不从我的备份重新开始。

标签: c# arrays sorting


【解决方案1】:

应该是zacasna[0]。在这种情况下,数组只能有一个值,数组从索引 0 开始。所以它应该是zacasna[0]。最好声明一个变量而不是数组,因为您只需要存储值。声明为Uporabnik zacasna

【讨论】:

  • 感谢您解决了我的问题。起初我什至不知道为什么它解决了它,但现在我明白为什么了。
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2020-08-18
  • 2020-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-16
相关资源
最近更新 更多