C # 2DArray IndexOutOfBound, почему?

#c# #arrays #2d

#c# #массивы #2d

Вопрос:

В следующем коде C # я хочу создать 2D-массив размером [5,2] . Если я правильно понимаю, это должно выглядеть так:

0 1 2

0[0,0] [0,1] [0,2]

1[1,0] [1,1] [1,2]

2[2,0] [2,1] [2,2]

3[3,0] [3,1] [3,2]

4[4,0] [4,1] [4,2]

Но почему моя программа выдает

Исключение IndexOutOfRangeException

…?

 using System;

namespace program {
    
    class program{
        Random random = new Random();
        
        int[,] board = new int[5,2];
        
        public program(){
            
            Print2DArray(randomBoard(0.5,board));
            
        }
        
        public int[,] randomBoard(double chance, int[,] board){
            int[,] temp = board;
            
            for(int y = 0; y < board.GetLength(1); y  ){
                for(int x = 0; x < board.GetLength(0); x  ){
                    
                    if(random.NextDouble() <= chance){
                        
                        board[y,x] = 1;
                        
                    } else {
                        
                        board[y,x] = 0;
                        
                    }               
                }
            }
            
            return temp;
        }
        
          public static void Print2DArray<T>(T[,] matrix)
    {
        for (int i = 0; i < matrix.GetLength(0); i  )
        {
            for (int j = 0; j < matrix.GetLength(1); j  )
            {
                Console.Write(matrix[i,j]   "t");
            }
            Console.WriteLine();
        }
    }
        
        static void Main(string[] args){    
            program program1 = new program();
        }
        
    }
}
  

Комментарии:

1. это индекс вне границ, потому что массив начинается с 0 и заканчивается на 4, this = 5 индексов, 0, 1, 2, 3, 4, если вы хотите сохранить тот же код, то сделайте его 6, и то же самое касается 2d-части

2. Извините, я плохо объяснил, я отредактировал это сейчас. В моей программе я использовал < array . Получаем длину(0) / < массив. getLength(1) , так что это не имеет большого значения, проблема все еще существует

3. Мой плохой, я не пробовал код до этого момента. я бы посмотрел еще раз

4. это не только потому, что циклы for работают неправильно? теперь, когда я действительно смотрю на это в Visual studio

5. y должен идти board.GetLength(0) вместо GetLength(1) . И аналогично, x тоже использует неправильные границы.

Ответ №1:

В вашем коде y переходит от 0 к числу элементов в измерении 1 , в то время x как переходит 0 к числу элементов в измерении 0

Однако внутри вашего for цикла у вас, похоже, поменялись местами размеры,

плата [y, x] = 1; // измените это на плату [x, y] = 1;

аналогично для else условия это должно быть board[x,y] = 0

Комментарии:

1. Спасибо! Думаю, я перепутал эти два.