Kopiowanie tablicy jednowymiarowej

Kopiowanie tablicy jednowymiarowej
Galand
  • Rejestracja:około 2 lata
  • Ostatnio:około rok
  • Lokalizacja:Wadowice
  • Postów:6
2

Cześć czemu to nie działa?

Kopiuj
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:

Kopiuj
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"?

edytowany 2x, ostatnio: Riddle
ZD
  • Rejestracja:około 3 lata
  • Ostatnio:ponad rok
  • Postów:2310
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# ?


If you put a million monkeys at a million keyboards, one of them will eventually write a Java program - the rest of them will write Perl
ZD
ps. słowo "kopiowanie" jest lepsze niż "przypisanie tablicy", bo to nie jest przypisanie tablicy C#
SA
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 9 godzin
  • Postów:1435
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.

SA
@Ferdynand Lipski: chyba warto umieć iterować po tablicach, co?
ZD
Mi się wydaje, ze kontrowersyjna linia jest jedyną własną
SW
  • Rejestracja:około 5 lat
  • Ostatnio:4 miesiące
  • Postów:250
0

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

Galand
  • Rejestracja:około 2 lata
  • Ostatnio:około rok
  • Lokalizacja:Wadowice
  • Postów:6
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ą:

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

a tą linijką:

Kopiuj
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:

Kopiuj
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]);
}
edytowany 5x, ostatnio: Riddle
Ales
  • Rejestracja:około 6 lat
  • Ostatnio:13 dni
  • Postów:121
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.