Не могу понять, что это «индекс массива вне диапазона» Ошибка - PullRequest
0 голосов
/ 25 мая 2018

Вот мои переменные

string[,] table = new string[104, 6];
int moveRow = 1;
int moveCol = 1;
int sum1 = 0;
int sum2 = 0;
int rowIndex1 = 1;
int rowIndex2 = 0;
int firstTableRow = 1;
int firstTableCol = 1;
int secondTableRow = 1;
int secondTableCol = 0;
int thirdTableRow = 0;
int thirdTableCol = 1;
int fourthTableRow = 0;
int fourthTableCol = 0;
int counterNextRow = 0;

Теперь это дает мне (только для меня) странный Array index is out of range здесь

if (moveRow > 1)
{

   firstTableCol += 1;
   secondTableCol += 1;
   thirdTableCol += 1;
   fourthTableCol += 1;
   //r1 = table[2,1] r2 = table[2,0] r3 = table[1,1] r4 = table[1,0]
   string d1 = table[firstTableRow, firstTableCol]; //<------- HERE ITS GIVING ME THE ERROR
   string d2 = table[secondTableRow, secondTableCol];
   string d3 = table[thirdTableRow, thirdTableCol];
   string d4 = table[fourthTableRow, fourthTableCol];

   moveRow += 1;
}

Вот весь мой код для этого

for(int col = 0; col < table.GetLength(0); col++){
     for (int row = 0; row < table.GetLength(1); row++)
     {               
            //if not equal length BLUE[0] else RED[1]
            //moverow = 1, movecol = 1 default
            if (table[moveCol, moveRow] == null)
            //1,1
            {
                //must be on table[2,0]
                //scan 
                //3,2
                string col1 = table[rowIndex1, row];
                string col0 = table[rowIndex2, row];

                if (col1 != null)
                {
                    sum1++;
                }
                if (col0 != null)
                {
                    sum2++;
                }
                counterNextRow += 1;
            }
            else
            {
                //if not null and on the first process
                if (counterNextRow == 0)
                {
                    //r1 = table[1,1] r2 = table[1,0] r3 = table[0,1] r4 = table[0,0]
                    string d1 = table[firstTableRow, firstTableCol];
                    string d2 = table[secondTableRow, secondTableCol];
                    string d3 = table[thirdTableRow, thirdTableCol];
                    string d4 = table[fourthTableRow, fourthTableCol];


                    if (d1 != null && d2 != null && d3 != null && d4 != null)
                    {
                        img.texture = (Texture)NewTexture[1];
                        p.SetActive(true);
                    }
                    else
                    {
                        img.texture = (Texture)NewTexture[0];
                        p.SetActive(true);
                    }
                    moveRow += 1;
                }
                //hindi unang process
                else
                {
                    if (moveRow > 1)
                    {

                        firstTableCol += 1;
                        secondTableCol += 1;
                        thirdTableCol += 1;
                        fourthTableCol += 1;
                        //r1 = table[2,1] r2 = table[2,0] r3 = table[1,1] r4 = table[1,0]
                        string d1 = table[firstTableRow, firstTableCol];
                        string d2 = table[secondTableRow, secondTableCol];
                        string d3 = table[thirdTableRow, thirdTableCol];
                        string d4 = table[fourthTableRow, fourthTableCol];


                        if (d1 != null && d2 != null && d3 != null && d4 != null)
                        {
                            img.texture = (Texture)NewTexture[1];
                            p.SetActive(true);
                        }
                        else if (d1 != null && d2 != null && d3 == null && d4 == null)
                        {
                            img.texture = (Texture)NewTexture[1];
                            p.SetActive(true);
                        }
                        else
                        {
                            img.texture = (Texture)NewTexture[0];
                            p.SetActive(true);
                        }
                        moveRow += 1;
                    }
                    else
                    {
                        firstTableRow += 1;
                        secondTableRow += 1;
                        thirdTableRow += 1;
                        fourthTableRow += 1;
                        //r1 = table[2,1] r2 = table[2,0] r3 = table[1,1] r4 = table[1,0]
                        string d1 = table[firstTableRow, firstTableCol];
                        string d2 = table[secondTableRow, secondTableCol];
                        string d3 = table[thirdTableRow, thirdTableCol];
                        string d4 = table[fourthTableRow, fourthTableCol];


                        if (d1 != null && d2 != null && d3 != null && d4 != null)
                        {
                            img.texture = (Texture)NewTexture[1];
                            p.SetActive(true);
                        }
                        else
                        {
                            img.texture = (Texture)NewTexture[0];
                            p.SetActive(true);
                        }
                        moveRow += 1;
                    }
                }
            }
        }
        //condition that if 1st board column 1 and column 0 has an equal length
        //mark on the 2nd board
        if (sum1 == sum2)
        {
            //red[1]
            img.texture = (Texture)NewTexture[1];
            p.SetActive(true);
        }
        else
        {
            //blue[0]
            img.texture = (Texture)NewTexture[0];
            p.SetActive(true);
        }
        //increment everytime the column is finish scanning
        sum1 = 0;
        sum2 = 0;
        rowIndex1++;
        rowIndex2++;
        moveCol++;
        moveRow = 1;
   }
 }

Я застрял здесь из-за этой ошибки, и я не понимаю, почему она дает мне ошибку Array index is out of range.У меня там нет никаких отрицательных чисел, так что, возможно, у меня не будет такой ошибки.Может ли кто-нибудь указать мне.

Ответы [ 4 ]

0 голосов
/ 28 мая 2018

Хм, я забыл проверить длину моих переменных до размера, который я использую.Так, например, для моей переменной rowIndex1 мне нужно проверить это следующим образом

if(rowIndex1 + 1 < table.GetLength(0)){
    rowIndex++;
}

Спасибо, ребята, за время.

0 голосов
/ 25 мая 2018

Ваши moveRow и moveCol начинаются с 1, а цикл for равен 0.Таким образом, ваш moveCol на один выше, чем индексатор цикла for.

0 голосов
/ 26 мая 2018

Ваша таблица определена как [columns, rows], но вы, похоже, индексируете как [rows, columns]

0 голосов
/ 25 мая 2018

Индекс массива должен быть от 0 до 103, а не от 1 до 104. Это может решить вашу проблему.

int moveRow = 0;
int moveCol = 0;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...