unity3d 团结|索引在数组的边界之外

uqdfh47h  于 2023-03-03  发布在  其他
关注(0)|答案(3)|浏览(286)

我需要一些随机整数的画布中复制的对象。所以我创建了数组,将填充随机值,但不工作,代码停止在第一个数组行(CPU_模型),当我看到统一编辑器中的数组是空的(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;
    }
46scxncf

46scxncf1#

数组索引从0开始,所以如果你从1开始循环,你将跳过每个数组的第一个元素,并且它将是未初始化的。要解决这个问题,简单地改变你的循环初始化从0开始,而不是从1开始,像这样:

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

另外,如果在Start()方法中使用i变量作为循环计数器,则没有必要将其声明为类成员。局部变量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;
    }
}
cwtwac6a

cwtwac6a2#

在C#中,数组从索引0开始,而不是从1开始。
因此,您应该将代码替换为

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

uqcuzwp83#

已找到解决方案。数组不能是公共的,因此没有它,所有系统都能正常工作。

相关问题