/ / Pesquisando um array bidimensional usando a propriedade Length - c #, arrays, loops, search, array multidimensional

Pesquisando uma matriz bidimensional usando a propriedade Length - c #, arrays, loops, search, array multidimensional

Ok, estou tentando pesquisar uma matriz bidimensionalusando a propriedade Length (eu tenho que usar isso caso contrário eu apenas usaria GetLength ()). Esta matriz é aleatoriamente preenchida com um número definido de linhas e colunas. Ele irá pedir ao usuário um número para procurar e, em seguida, ele será procure a matriz e retorne true ou false E retorne os índices da linha e da coluna se esse número for encontrado.

Eu estou bastante confiante no código dopesquisa que fiz para obter o loop for definido corretamente, mas atualmente estou recebendo um erro que diz "Número errado de índices dentro de []; esperado 2" quando tento pesquisar as colunas da matriz.

Eu olhei este erro para cima e do que eu encontrei esta deve ser a configuração correta. Então, eu não tenho certeza de onde está o meu problema com este loop, alguém poderia dar uma olhada em me avisar qual o passo que eu estou faltando?

Obrigado!

int [,] math;
math = new int[3, 5]; //So you can see my array that is declared in main

static bool SearchArray(int search, int [,] array, out int row, out int coln)
{
row = -1;
coln = -1;
// search parameter is given from another method where it asks the user for a number to search for in the array.

for (int x = 0; x < array.Length; x++)
{
for (int y = 0; y < array[x].Length; y++) //error is here with the array[x] and continues to any reference I try to make similarly.
{
if (array[x][y] == search)
{
row = array[x];
coln = array[y];
return true;
}
}
}
return false

Respostas:

0 para resposta № 1

Você está misturando matrizes irregulares com multidimensionais, na verdade, com matrizes bidimensionais. A solução para dois dim. Matrizes seria algo assim:

static bool SearchArray(int search, int [,] array, out int row, out int coln)
{
row = -1;
coln = -1;
for (int x = 0; x < array.GetLength(0); x++)
{
for (int y = 0; y < array.GetLength(1); y++)
{
if (array[x,y] == search)
{
row = x;
coln = y;
return true;
}
}
}
return false
}

0 para resposta № 2

Vejo essa questão para detalhes das diferenças entre arrays multidimensionais (como você está usando aqui) e arrays irregulares (arrays de arrays).

Se você declarar uma matriz multidimensional da seguinte forma:

int [,] math = new int[3, 5];

você deve acessar valores assim:

int value = math[1,2];

Se você declarar um array irregular, assim:

int[][] math = new int[3][];
math[0] = new int[5];
math[1] = new int[5];
math[2] = new int[5];

(Embora normalmente os tamanhos das sub-matrizes variem - por isso irregulares). Então você acessa os valores como:

int value = math[1][2];

Para o seu problema em particular, se estiver usando matrizes multidimensionais, você também precisará usar "Array.GetLength", como em:

for (int x = 0; x < array.GetLength(0); x++)

para obter as dimensões individuais das peças (como em essa questão). No seu exemplo ".Length" está dando a você o total tamanho da matriz, não o comprimento da primeira dimensão.