/ / Wyszukiwanie dwuwymiarowej tablicy za pomocą właściwości Length - c #, tablice, pętle, wyszukiwanie, tablica wielowymiarowa

Wyszukiwanie dwuwymiarowej tablicy za pomocą właściwości Length - c #, tablice, pętle, wyszukiwanie, tablica wielowymiarowa

Ok, próbuję przeszukać dwuwymiarową tablicęużywając właściwości Length (muszę tego użyć, inaczej użyłbym GetLength ()) Ta tablica jest losowo wypełniana określoną liczbą wierszy i kolumn, która poprosi użytkownika o wyszukanie numeru, a następnie przeszukaj tablicę i zwróć true lub false ORAZ odeślij indeksy wiersza i kolumny, jeśli ten numer zostanie znaleziony.

Jestem dość pewny w kodzie zbadania zrobiłem, aby poprawnie ustawić pętlę for, ale obecnie dostaję błąd, który mówi "Wrong liczba indeksów wewnątrz [], oczekiwano 2", gdy próbuję przeszukać kolumny tablicy.

Popatrzyłem na ten błąd i na podstawie tego, co odkryłem, powinno to być właściwe ustawienie. Tak więc, nie jestem pewien, gdzie jest mój problem z tą pętlą, czy ktoś może rzucić okiem na mnie, jaki krok mam?

Dzięki!

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

Odpowiedzi:

0 dla odpowiedzi № 1

Mieszacie poszarpane tablice z wielowymiarowymi, w rzeczywistości z macierzami dwuwymiarowymi. Rozwiązanie dla dwóch dim. tablice będą wyglądały mniej więcej tak:

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 dla odpowiedzi nr 2

Widzieć to pytanie po szczegóły różnic między tablicami wielowymiarowymi (jak tu używacie) i poszarpanymi tablicami (tablice tablic).

Jeśli zadeklarujesz tablicę wielowymiarową, jak na przykład:

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

musisz uzyskać dostęp do wartości w ten sposób:

int value = math[1,2];

Jeśli zadeklarujesz tablicę poszarpaną, na przykład:

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

(Chociaż zazwyczaj rozmiary pod-tablic byłyby różne - w związku z tym poszarpane.) Następnie uzyskujesz wartości jako:

int value = math[1][2];

W przypadku Twojego konkretnego problemu, jeśli korzystasz z tablic wielowymiarowych, będziesz również musiał użyć "Array.GetLength", jak w:

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

aby uzyskać indywidualne wymiary części (jak w to pytanie). W twoim przykładzie ". Długość" daje ci całkowity rozmiar tablicy, a nie długość pierwszego wymiaru.