【问题标题】:Unity | Index was outside the bounds of the array团结 |指数数组的边界之外
【发布时间】:2023-02-26 22:20:59
【问题描述】:

我需要一些随机整数来复制画布中的对象。所以我创建了将填充随机值的数组,但不起作用并且代码在第一个数组行 (CPU_Model) 上停止,当我在统一编辑器中看到数组时它是空的(0 个元素)。 对于错误的探索或类似的事情,我很抱歉,我是编码新手。

 public int[] CPU_Model = new int[15];
    public int[] CPU_MHz = new int [15];
    public string[] CPU_Vars = new string[15];
    public int i = 0;

    public void Start()
    {
        for (int i = 1; i<15; i++)
        {
            Debug.Log(i);
            CPU_Model[i] = Random.Range(400, 9999);
            CPU_MHz[i] = Random.Range(1200, 5400);
            CPU_Vars[i] = "CPU" + i;
            //i++;
        }
        //i = 0;
    }

【问题讨论】:

  • 在 C# 中,数组从索引 0 开始,而不是从 1 开始
  • 你的数组大小是 15,但你只填充了 14 个位置(对于 [int i = 1; i<15; i++)]。

标签: c# arrays unity3d


【解决方案1】:

数组索引从 0 开始,因此如果您从 1 开始循环,您将跳过每个数组的第一个元素,并且它不会被初始化。要解决此问题,只需将循环初始化更改为从 0 而不是 1 开始,如下所示:

for (int i = 0; i < 15; i++)

此外,如果您将 i 变量用作 Start() 方法中的循环计数器,则无需将它声明为类成员。这个局部变量i隐藏了类成员变量i,也就是说循环内的i与循环外的i是一个独立的变量。由于您只在循环内使用局部变量i,不需要访问它的值循环外,没有必要将其声明为类成员。

public int[] CPU_Model = new int[15];
public int[] CPU_MHz = new int[15];
public string[] CPU_Vars = new string[15];

public void Start()
{
    for (int i = 0; i < 15; i++)
    {
        CPU_Model[i] = Random.Range(400, 9999);
        CPU_MHz[i] = Random.Range(1200, 5400);
        CPU_Vars[i] = "CPU" + i;
    }
}

【讨论】:

  • 干得好,一个很好的答案!你值得我+1
【解决方案2】:

在 C# 中,数组从索引 0 开始,而不是从 1 开始。
所以你应该用

for (int i = 0; i<15; i++) {
  ....
}

【讨论】:

  • 很好,而且应该是i &lt; 15
猜你喜欢
  • 2011-04-15
  • 2018-10-26
  • 1970-01-01
相关资源
最近更新 更多