【问题标题】:C# populate string multidimensiona array inside a loopC# 在循环内填充字符串多维数组
【发布时间】:2016-03-21 20:42:11
【问题描述】:

我正在尝试创建一个矩阵并用字符串填充它,以便以后可以对其进行操作,这是我的代码

using UnityEngine;
using System.Collections;

public class ScenarioMatrix : MonoBehaviour {

    public GFRectGrid _grid;
    public string[,] _scenarioArray;
    /*
    USAREMOS A SEGUINTE NOMECLATURA PARA O GRID
    E = GRID VAZIO TEM SOMENTE O CENARIO
    SP = Spawn Point, é onde o player começa
    EP = é onde o player termina
    L = Lajota é o caminho onde o player pode andar
    CG = color get, é onde o bloco pega uma cor
    CD = color drop é onde o bloco deixa a cor
    */
    private string[] _values = {"E","SP","EP","L","CG","CD" };

    // Use this for initialization
    void Start() {

        _scenarioArray = new string[(int)_grid.size.x, (int)_grid.size.z];

        //montamos o array
        for (int _largura = 1; _largura <= _grid.size.x; _largura++)
        {
            for (int _comprimento = 1; _comprimento <= _grid.size.z; _comprimento++)
            {
                string _valor = _values[Random.Range(0, _values.Length-1)];
                _scenarioArray[_largura, _comprimento] = _valor;
                //Debug.Log(_values[Random.Range(0, _values.Length)]);
            }

        }
        Debug.Log(_scenarioArray);
    }


    // Update is called once per frame
    void Update () {

    }
}

到目前为止,我得到了错误 IndexOutOfRangeException:数组索引超出范围。 ScenarioMatrix.Start () (在 Assets/Game/Scripts/ScenarioMatrix.cs:30)

我在这段代码中做错了什么?

【问题讨论】:

  • 你的(int)_grid.size.x, (int)_grid.size.z 尺寸是多少?
  • 网站通常是 5x5,但可以更改,应该更改
  • 更改for (int _largura = 0; _largura &lt; _grid.size.x; _largura++)for (int _comprimento = 1; _comprimento &lt; _grid.size.z; _comprimento++)

标签: c# arrays loops matrix unity3d


【解决方案1】:

_comprimento &lt;= _grid.size.z 替换为_comprimento &lt; _grid.size.z

_largura &lt;= _grid.size.x_largura &lt; _grid.size.x

数组索引从 0 开始(它们从 0 开始,而不是 1)

【讨论】:

  • 工作错误已修复我如何调试.log 这个矩阵来查看它?
  • 只需在内部 for 循环中执行 //Debug.Log(_valor);,就在 _scenarioArray[_largura, _comprimento] = _valor; 之后
  • 您还应该从索引 0 开始循环。int _largura = 0int _comprimento = 0;
猜你喜欢
  • 2017-06-29
  • 2022-12-10
  • 1970-01-01
  • 2012-11-21
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 2013-05-06
相关资源
最近更新 更多