bugfix> c# > 投稿

ここに私の変数があります

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 件
  • 配列インデックスのrangは、1〜104ではなく0〜103でなければなりません。問題が解決する可能性があります。

    int moveRow = 0;
    int moveCol = 0;
    
    

  • あなたの moveRow  および moveCol  は1から始まり、forループは0ベースです。だからあなたの moveCol  forループインデクサーより1つ高い。

  • あなたのテーブルは [columns, rows] として定義されています  しかし、あなたは [rows, columns] としてインデックス付けしているようです

  • うーん、変数の長さを使用している次元までチェックするのを忘れていました。このようにして、たとえば変数 rowIndex1  このように確認する必要があります

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

    時間をありがとう。

あなたの答え