Kopiowanie tablicy jednowymiarowej

2

Cześć czemu to nie działa?

int[] uczestnicy = { 19, 34, 23, 54, 31 };
        int[] odwrotnie = new int[uczestnicy.Length];
        for (int i = 1; i <= uczestnicy.Length; i++)
            odwrotnie[uczestnicy.Length] = uczestnicy[i];

for (int i = 0; i < odwrotnie.Length; i++)
{
  Console.WriteLine(odwrotnie[i]);
}

Błąd to:

Indeks był poza granicami tablicy

Ale jak to możliwe jeśli tablica "odwrotnie" ma tą samą długość (liczbę indeksów) co tablica "uczestnicy"?

4
Galand napisał(a):

Błąd to: „Indeks był poza granicami tablicy.” ale jak to możliwe jeśli tablica "odwrotnie" ma tą samą długość (liczbę indeksów) co tablica "uczestnicy"?

A jak wg ciebie się liczą indeksy tablicy C# ?

3
ZrobieDobrze napisał(a):

A jak wg ciebie się liczą indeksy tablicy C# ?

Co zabawne przy wypisywaniu już jest dobrze :D Podejrzewam, że bezmyślne kopiuj-wklej lub wyuczony pattern, a jak przyszło pomyśleć to wychodzi wiedzą na temat tablic.

Kończymy zabawę, dam odpowiedź wprost - indeksy tablicy o n elementach zaczynają się od 0, a kończą na n-1. Odwołanie do n-tego indeksu powoduje wyjątek.

0

Indeks odwrotnie[uczestnicy.Length] wychodzi poza zakres. Poprzednia linia z pętlą też ma błąd.

2

Wszystkie informacje i programy biorę z podręcznika "Wstęp do programowania w C#" autorstwa pani Anny Kępy i pana Tomasza Staśa lekko je modyfikującimage_2023-03-05_130340342.png Tutaj mam poprawioną wersje ale dalej nie rozumiem różnicy pomiędzy
tą linijką:

 int[] tab2 = new int[tab1.Length];
            for (int i = 0; i<tab1.Length; i++)
            {
                tab2[i] = tab1[i];
            }

a tą linijką:

int[] tab2 = new int[tab1.Length];
for (int i = 0; i<tab1.Length; i++)
{
  tab2[tab1.Length] = tab1[i];
}

Czym to się różni. Przecież liczba iteracji pętli jest tą samą wartością co liczba indeksów w tablicy tab1. A jednak w pierwszym przypadku to działa a w drugim nie.

Poprawiona wersja:

int[] tab1 = { 19, 34, 23, 54, 31 };
int[] tab2 = new int[tab1.Length];
for (int i = 0; i<tab1.Length; i++)
{
    tab2[i] = tab1[i];
    Console.WriteLine(tab1[i]+ " {0}",i);
}
for (int i = 0; i < tab2.Length; i++)
{
    Console.WriteLine(tab2[i]);
}
4

Załóżmy, że tablice są zeszytami i chcesz przepisać treść jednego do drugiego. Oba zeszyty mają po 10 stron ale ich numeracja zaczyna się od 0 a nie od 1.
Length zwraca ci ilość stron czyli 10 a ostatnia strona ma numer 9. Tu występuje błąd który podałeś, czyli chcesz się odwołać do strony (10), której nie ma w zeszycie.
Druga rzecz to chcesz zapisać cały zeszyt 1 na ostatniej stronie zeszytu 2.

1 użytkowników online, w tym zalogowanych: 0, gości: 1