如何在负指数C#(UNITY)

时间:2018-05-17 07:07:22

标签: c# android unity3d

您好我是c#编程的新手我只是想问一下是否有办法将索引设为负1?

这是我的代码

string[,] table = new string[104, 15];
int xIndex = -1;
int yIndex = 0;

if(table.GetLength(0) < xIndex){
    break;
}

if (result.Equals(newPrevious) || result.Equals("A") && yIndex <  table.GetLength(1))
{
    yIndex += 1;
    table[xIndex, yIndex] = result;
}
else
{
    xIndex += 1;
    yIndex = 0;
    table [xIndex, yIndex] = result;
}
previous = result ;

if (!result.Equals("A"))
{
     newPrevious = previous;
}

这里给我一个错误

if (result.Equals(newPrevious) || result.Equals("A") && yIndex <  table.GetLength(1))
{
    yIndex += 1;
    table[xIndex, yIndex] = result;   //<---- ERROR HERE
}
  

IndexOutOfRangeException:数组索引超出范围。

修改

我会解释我在做什么。我正在为我的游戏创建一个记分牌,xIndexyIndex在我的记分牌中作为我的对象的位置,就像这样

例如我在string[] strData = {"A ,B ,B ,B ,C ,C ,C ,B ,B ,A ,B ,C ,A ,C "};

上有此值

它会给我一个Exception错误

但如果我将string[] strData更改为此string[] strData = {"B ,B ,B ,B ,C ,C ,C ,B ,B ,A ,B ,C ,A ,C "};

它不会给我一个异常错误。

编辑2

这是我的整个代码

string[,] table = new string[104, 15];
int xIndex = -1;
int yIndex = 0;
string newPrevious = "placeholder";
//C = BLUE, B = RED, A = GREEN
string[] strData = {"A  ,C  ,C  ,C  ,C  ,C  ,C  ,B  ,B  ,A  ,B  ,C  ,A  ,C  "};

//conditions
string[] scoreBoard = new string[]
{"C  ", "B  ", "A  ",
 "C B","B C" };
string OriginalData = "";


void Start(){
    StartCoroutine ("Win_Log");
}

IEnumerator Win_Log(){

    yield return new WaitForEndOfFrame ();

    for (int i = 0; i < strData.Length; i++) {
        OriginalData += strData [i];
        OriginalData += ",";
    }
    string[] newNewData = OriginalData.Split (',');
    string result = "";
    string previous = "";


    foreach (string newStrData in newNewData) {
        Debug.Log ("This is the data : " + newStrData);

        GameObject o = Instantiate (prefab_gameobject) as GameObject;
        o.transform.SetParent (pos_big_road);
        o.transform.localScale = Vector3.one;

        img = (RawImage)o.GetComponent<RawImage> ();

        //check the length so that it won't throw an exception
        if (newStrData.Length > 1) {
            //get only the first letter of the value A,B,C
            result = newStrData.Substring (0, 1);
        } 
        else {
            result = "";
        }

        #region BIG ROAD
        if(table.GetLength(0) < xIndex){
            break;
        }

        if (result.Equals(newPrevious) || result.Equals("A") && yIndex <  table.GetLength(1))
        {
            yIndex += 1;
            table[xIndex, yIndex] = result;
        }
        else if (result.Equals("A"))
        {
            xIndex += 1;
            table[xIndex, yIndex] = result;
        }
        else
        {
            xIndex += 1;
            yIndex = 0;
            table [xIndex, yIndex] = result;
        }
        previous = result ;

        if (!result.Equals("A"))
        {
            newPrevious = previous;
        }

这是我想要的输出

EXPECTED OUTPUT

但是如果将first string value更改为B or C,则不会引发异常错误。

正如您在图像链接中看到的那样,如果值超过7,它将移动到x轴但仍然与y轴相同。

1 个答案:

答案 0 :(得分:4)

不,数组索引从0开始。

我不确定尝试使用负数索引是什么意思,但你可以尝试通过考虑0来减去它(减去你的最低值)。