#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. Спасибо! Думаю, я перепутал эти два.