Tablice jednowymiarowe
Tworzenie tablic
Tablice to struktury, które pozwalają nam gromadzić większą ilość danych w uporządkowanej formie. Jeśli potrzebujemy przechować 100 imion, czy liczb zamiast deklarować 100 zmiennych możemy do tego użyć tablicy. W Javie istnieją zarówno tablice jedno jak i wielowymiarowe. Schematyczna deklaracja jednowymiarowej tablicy wygląda następująco:
typ[] nazwa_tablicy = new typ[liczba_elementów];
poprawny jest także zapis:
typ nazwa_tablicy[] = new typ[liczba_elementów];
Przez ten zapis możemy rozumieć zadeklaruj i utwórz pustą tablicę elementów typu "typ" o liczbie elementów równej "liczba_elementów". Oczywiście typem mogą być zarówno liczby, znaki, ciągi znaków, lub obiekty.
Istnieje również inny sposób utworzenia tablicy, jeśli od razu znamy elementy:
typ[] tablica = {wartosc1, wartosc2, wartosc3, ...};
W ten sposób tworzymy gotową tablicę od razu zawierającą jakieś wartości, a jej rozmiar jest równy ilości elementów.
Elementy tablicy
Tablice są strukturą, której wielkość jest stała. Nie da się jej zwiększać, ani zmniejszać, można jedynie edytować poszczególne komórki, lub je wyzerować. Do elementów można się odwoływać poprzez podanie indexu w tablicy, co wygląda o tak:
int jakas_zmienna = nazwa_tablicy[numer_indexu];
//przykład:
int liczba = tab[3];
W powyższym przykładzie do zmiennej "int liczba" przypisaliśmy czwarty element tablicy o nazwie tab . Trzeba pamiętać, że komórki są numerowane od zera . Oczywiście typ tablicy oraz typ zmiennej muszą się zgadzać, chyba, że użyjemy konwersji, bądź rzutowania.
Tworzenie tablic
Poniżej zobaczmy praktyczny przykład ukazujący wypełnienie tablicy kolejnymi liczbami całkowitymi od 1 do 10 i przypisanie jakiejś zmiennej wartości z komórki.
public class Tablice {
public static void main(String[] args) {
int[] tablica = new int[10];
for (int i = 0; i < 10; i++)
tablica[i] = i + 1;
int zmienna = tablica[3];
for (int i = 0; i < 10; i++)
System.out.println("Kolejna komórka to: " + tablica[i]);
}
}
Najpierw zadeklarowaliśmy i utworzyliśmy tablicę liczb typu int o rozmiarze 10. Następnie w pętli for wypełniamy ją liczbami od 1 do 10. Jak widzimy wygodnie robi się to właśnie w taki sposób, ponieważ możemy użyć zmiennej z warunku pętli do numerowania komórek a także przypisywania odpowiednich wartości. Ponieważ tablice w języku Java numerowane są od 0 to musimy do kolejnych wartości dodać 1. Gdy mamy już gotową tablicę to możemy wykorzystać ją do przypisania jednej z wartości ( u nas 4) a następnie wyświetlenie jej zawartości.
Przekroczenie zakresu
Dodatkowo ważną rzeczą o której trzeba na razie chociaż wspomnieć to wyjątek zgłaszany przez tablice. W przypadku, gdy przekroczymy zakres, czyli na przykład spróbujemy wykonać poniższy kod:
public class Tablice{
public static void main(String[] args){
int[] tablica = new int[10];
tablica[10] = 123;
}
}
wygenerowany zostanie wyjątek ArrayIndexOutOfBoundsException, ponieważ próbujemy przypisać do komórki tablicy o indeksie 10 (numerowanie od 0, więc 10 elementowa tablica ma maksymalnie index 9). Brzmi strasznie, ale na szczęście takie nie jest. Spróbuj wykonać powyższy kod i zobacz co się stanie. Jeśli zobaczysz takie zachowanie w innych swoich programach to będziesz wiedział, że użyłeś niepoprawnego indeksu tablicy.
Zamiast tablic w większości wypadków lepiej korzystać z takich struktur danych jakimi są listy. Ich zaletą jest to, że same dopasowują swój rozmiar do liczby elementów, jednak nie zawsze są tak wydajne jak proste tablice przedstawione powyżej.
Dyskusja i komentarze
Masz pytania do tego wpisu? Może chcesz się podzielić spostrzeżeniami? Zapraszamy dyskusji na naszej grupie na Facebooku.
Poniżej znajdziesz archiwalne wpisy z czasów, gdy strona była jeszcze hobbystycznym blogiem.
Grzesiu
Czegoś tu nie rozumiem; for(int i=0; i<10; i++) tablica[i] = i+1; int zmienna = tablica[3]; for(int i=0; i<10; i++) System.out.println("Kolejna komórka to: "+tablica[i]); } } Dlaczego pętla for nie ma klamer w których się zaczyna i kończy? To wygląda tak jakby w pierwszej funkcji for jedną z rzeczy które pętla wykonuje dla danego "i' było wykonanie 10 opecacji drugie pętli. Czy może kiedy for nie jest ograniczone klamrami liczy się tylko linia nastepująca po niej?
Slawek
http://javastart.pl/podstawy-jezyka/petle/ "Podobnie jak przy instrukcji warunkowej if można pominąć nawiasy klamrowe w wypadku, gdy w ciele pętli znajduje się tylko jedna metoda, lub dowolna instrukcja"
Witek
Witam Może ktoś mi wytłumaczyć dlaczego jak wpisuję wartość min = 1 to w wyniku na konsoli wyświetlane jest 0, a jak wpisuję wartość min = -1 to jest ok., czy to może mieć związek z zainicjowaniem zmiennych w_min i w_maks warością = 0, jeżeli nie to gdzie może być błąd. Poza tym program działa poprawnie. Z góry dziękuję za pomoc. Kod programu: <strong>wykasowane</strong>
Slawek
umieszczaj kod w znacznikach <pre> </pre> wtedy pozostanie taki jak trzeba. Ot takie zabezpieczenie, które czasami przeszkadza. /edit: a jednak niezarejestrowanym użytkownikom nic nie pomoże. Muszę coś z tym pomyśleć ...
Witek
Dzięki za informacje o znacznikach, nie wiedziałem, że trzeba tu umieszczać kod znacznikach. Wspomniałeś o rejestrowaniu użytkowników, szukałem, aby się zarejestrować, niestety nie znalazłem(może gdzieś pominąłem) tylko okienko do komentarzy, ale ja nie dostaje info. na pocztę o odp. na komentarz/e. Ps. Znalazłem przyczynę błędu, teraz już jest ok., dzięki. Pozdrawiam Witek
Valdy
Tak też da radę: public class Tablice{ public static void main(String[] args) { int[] tab = new int[10]; for(int i=0; i<10; i++){ tab[i] = i + 1; System.out.println("Kolejna komórka to: "+tab[i]); } } }
Agnieszka
Czy kogokolwiek maszyna wirtualna jest na tyle zdolna ze w wyniku podanego kody wyświetla elementy od 1 do 10 a nie od 0 do 9 ? ja mam taka sytuacje....
Greg
Zapewne już sobie poradziłas, ale poniższy kod ładnie tą zależność "pokazuje": public class Tablice { public static void main(String[] args) { int[] tablica = new int[10]; for (int i = 0; i < 10; i++) tablica[i] = i + 1; int zmienna = tablica[3]; for (int i = 0; i < 10; i++) System.out.println("Element tablicy w pozycji "+i+" to: " + tablica[i]); System.out.println(" "); System.out.println("------TABLICA-------"); for (int i = 0; i < 10; i++) System.out.print(tablica[i]+" "); System.out.println("\n------pozycja-------"); for (int i = 0; i < 10; i++) System.out.print(i+" "); System.out.println("\n--------------------"); } }
Witek
Jężeli w pętli for wpiszesz tab[i] = i, bez plus 1, to wynik będzie wyświetlany od 0 do 9.
andrzej
do rozwiazania drugiego zadania sugerujesz uzycie .lenght, ktora to wlasnosc opisujesz dopiero przy tablicach wielowymiarowych. czy bez lenght mozna spokojnie zrobic to samo na tyle przejrzyscie zeby w oczy nie klulo?:) btw bardzo ciekawy kursik, coraz mniej czuje sie baranem w temacie javy.
mrJaros
Napisałeś "Ponieważ tablice w języku Java numerowane są od 0 to musimy do kolejnych wartości dodać 1." Otóż nie musimy, tylko chcemy :) Bo chcemy mieć w tablicy liczby 1,2,3,...,10. Ale możemy chcieć liczby 0,...,9 albo cokolwiek innego, np 2^i :-)
Marcin
Zawsze mnie to zastanawiało czy "i" może być każdą inna literą?
andrew
Witam. Mam problem z pobraniem wielkości tablicy, a raczej z pierwszą pętlą. Jeśli pobiore wielkość w ten sposób: <code> Scanner in=new Scanner(System.in); int a=in.nextInt(); String[] tabNazwisko=new String[a]; for (int i=0;i<tabNazwisko.length;i++) { System.out.println("podaj nazwisko "+(i+1)+" pracownika :"); tabNazwisko[i]=in.nextLine(); } </code> to pętla przeskakuje raz automatycznie. Jeślie przed pętlą stworze nowy obiekt "odczyt" <code> Scanner odczyt=new Scanner(System.in);</code> i go wykorzystam w pętli <code> for (int i=0;i<tabNazwisko.length;i++) { System.out.println("podaj nazwisko "+(i+1)+" pracownika :"); tabNazwisko[i]=odczyt.nextLine(); } </code> to jest wszystko wporządku. Jak "zerować" obiekt "in", aby cały program działał na nim?
Kefas
Witam! Co trzeba zrobić w kodzie aby imiona zapisywały się do pliku wszystkie. W tej chwili nadpisują się w pętli i zapisuje się tylko ostatnie imię. Albo inaczej, jak zapisać całą zawartość tablicy do pliku, bez użycia pętli? <code> import java.util.*; import java.io.*; public class Imiona { /** * @param args */ public static void main(String[] args) throws FileNotFoundException { // TODO Auto-generated method stub String tablica[] = new String[5]; Scanner odczyt = new Scanner(System.in); for(int i=0; i<5; i++){ System.out.println("Podaj imię: "); String imie = odczyt.nextLine(); tablica[i]= imie; PrintWriter zapis = new PrintWriter("imiona.txt"); zapis.println(imie); zapis.close(); } for(int i=0; i < 5; i++) System.out.println("Imię które podałeś to: "+tablica[i]); } } </code>
Witek
Witam Skorzystaj z tego fragmentu kodu u mnie działa Mam nadzieję, że Ci pomoże <code> for(int i=0; i<3; i++){ imiona = odczyt.nextLine(); tab[i] = imiona;//odczyt.nextLine(); } zapis = new PrintWriter("Imona.txt"); for(String x: tab) zapis.println(x); zapis.close(); System.out.println("Podane imiona to:"); </code>
Kefas
Dzięki, pomogło :)
Katarzyna
Tablice typu int - ok, ale czy moglby ktos napisac, jak utworzyc tablice typu string, gdzie ilosc elementow tablicy ma zostac podana przez uzytkownika? Cos mieszam z indeksem, bo za kazdym razem wyskakuje mi blad ArrayIndexOutOfBoundsException...
Slawek
2 komentarze wyżej.
Katarzyna
Niby tak, przejrzalam te komentarze i zastosowalam co potrzebne w moim programie, ale nadal wyskakuje ten blad. Czy ktos moglby zerknac i powiedziec, w ktorym miejscu zle napisalam kod? <code> import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.Scanner; public class komis3{ public static void main(String[] args) throws FileNotFoundException{ Scanner in = new Scanner(System.in); System.out.println("Program: KOMIS SAMOCHODOWY"); System.out.println("Podaj ilosc samochodow, ktora chcesz wprowadzic:"); int a = in.nextInt(); String[] tablica = new String[a]; Scanner odczyt = new Scanner(System.in); for(int i=0; i0){ System.out.println(tablica[licznik]+" "); licznik--; } PrintWriter zapis1 = new PrintWriter("komis.txt"); for (String x: tablica) zapis1.println(x); zapis1.close(); System.out.println("Wpis dodany"); } } </code>
Slawek
Napisz po prostu jaki błąd dostajesz, tak to raczej ciężko pomóc.
Witek
Witam Poniżej masz poprawiony kod programu u mnie dział. Mam nadzieję, że oto Ci chodziło. Pozdrawiam <code> import java.util.Scanner; import java.io.File; import java.io.FileNotFoundException; import java.io.PrintWriter; public class Komis_Auta { /** * Napisz program, który pobierze od użytkownika dowolną ilość marek aut, zapisze je * do tablicy, a następnie do pliku "Komis Auta.txt" * Wyniki przedstawi na konsoli * * @author Wiciu */ public static void main(String[] args) throws FileNotFoundException { Scanner odczyt; String markaAuta; PrintWriter zapis; File plik; int iloscAut; String tab[]; System.out.println("Podaj ilosc marek samochodów do wprowadzenia:"); odczyt = new Scanner(System.in); iloscAut = odczyt.nextInt(); tab = new String[iloscAut]; System.out.println("Wpisz " + iloscAut + " marki pojazdów"); for(int i = 0; i < iloscAut; i++){ odczyt = new Scanner(System.in); markaAuta = odczyt.nextLine(); tab[i] = markaAuta; } System.out.println(); System.out.println("Podane auta do zapisu to:"); for(String x: tab) System.out.println(x); System.out.println(); zapis = new PrintWriter("Komis Auta.txt"); for(String x: tab) zapis.println(x); zapis.close(); System.out.println("Odczytane nazwy aut z pliku to:"); plik = new File("Komis Auta.txt"); odczyt = new Scanner(plik); while(odczyt.hasNextLine()){ markaAuta = odczyt.nextLine(); System.out.println(markaAuta); } System.out.println("Koniec programu"); } } <code>
andrew
Witam. Jak z tablicy <code>int tab[] = {1,2,3,4,5}; </code> wyswietlić losową liczbę ? Wiem, że poniższy kod jest zły, ale chyba jestem blisko ? <code> Random r=new Random(); System.out.println(r.tab[i]); </code> Ktoś podpowie jak urzyć klasy Random ? Pozdrawiam
Slawek
Gdzie masz w swoim wycinku kodu zmienną i, że jej używasz? Trochę logicznego myślenia :) <pre class=java"> int[] tab = {1, 2, 3, 4, 5}; System.out.println(tab[new Random().nextInt(tab.length)]); </pre> Omawiając: Wyświetl wartość tablicy z losowego indeksu losowanego z indeksów od 0 do długość_tablicy-1
ON
I po kiego grzyba te tablice?? To jest najbardziej niezrozumiała część Twojego kursu.
Slawek
Na przykład po to, żeby nie deklarować 500 zmiennych i żeby można było w łatwy sposób wypełniać je, lub odczytywać dane w pętlach.
ON
Aaaaa OK Już rozumiem :)
Daniel
Jeżeli ktoś z czytających ten kurs nie rozumie zastosowania/działania struktur typu tablica czy rekord (bądź struktura, jak zwał tak zwał) polecam wcześniej się zapoznać z kursem PASCALA (bo takich w sieci jest najwiecej). Idea jest ta sama, jak w każdym języku programowania. PASCAL został stworzony do celów dydaktycznych, ale jeśli ogarniesz na przykładzie PASCALA to i dasz rade w innych językach bo sens i działanie instrukcji elementarnych jest niemal taki sam. Ja osobiście nie lubię PAsCALA ale jest zrozumiały jeśli troszeczkę umiesz angielski, i dodatkowo jest zrozumiały dla "programisty". Jeżeli już się nauczysz jak korzystać z tego co Ci język oferuje będzie Ci naprawdę dużo łatwiej się nauczyć innych języków wysokiego poziomu na poziomie elementarnym. A jeśli zaczynasz swoją naukę od tego kursu, jest ok! Tylko będzie Ci łatwiej jeśli zapoznasz się wcześniej z podstawami języka ANSI C bo od niego wiekszość języków się wywodzi. Ale ten kurs jak najbardziej polecam:)
Jerzy Sobczyk
Mam pytanie. Czy język Java traktuje tablice jako zmienne i czy tablicę może zwracać metoda klasy instrukcją return? Pozdrawiam Jurek S.
Marcin Kunert
Pewnie, że można. Tutaj masz przykład: public int[] zwrocTablice() { int[] wynik = new int[5]; wynik[0] = 5; return wynik; }
Karol2
Jak zainicjalizować klasy z których składa się tablica? Nie mogę wybrać którego konstruktora klasy wybrać przy tworzeniu tablicy.
Witek
Witam Nie bardzo rozumie twojego pytania. Jeśli chodzi Ci o tworzenie tablic to możesz zrobić np.: Tablica typu np.: int [] tablica = new int[5]; // tablica typu int 5 –cio elementowa lub int[] tablica = {99,10,18,25,45};
Janusz
Dlaczego pętlą foreach nie można zapisywać w tablicy? Kod int[] tablica = new int[5]; for(int e : tablica) e = 7; nie działa
Sławek Ludwiczak
Bo wartość 7 przypisujesz w tym przypadku do zmiennej e. W pętli for each elementy przypisuje/odczytuje się do kopii obiektów/elementów w tablicy, a nie do ich faktycznych instancji/wartości. Dobry przypadek do JavaTraps :)
Janusz
Czyli pętla for-each pozwala tylko na odczyt elementów tablicy (funkcja, a raczej METODA operuje na argumentach przekazanych przez kopię, a nie wskaźnik do argumentu - jak w klasycznym C), natomiast do zapisu w tablicy muszę użyć tradycyjnej pętli? deklaracja tablicy: int[] tablica = new int[10]; do zapisu tylko jeden sposób ??? (wypełnianie tablicy siódemkami): for(int i=0; i<tablica.length; i++) tablica[i]=7; Odczyt tablicy możliwy jest już na dwa sposoby: (???????) for(int i=0; i<tablica.length; i++) System.out.printf("%3d", tablica[i]); oraz for(int e : tablica) System.out.printf("%3d", e); [Do zgłębiania Bruca Eckela jeszcze nie doszedłem]
Spiral
tablica[i] = i + 1; Nie rozumiem tego, co ten fragment właściwie robi?
Spiral
Mam też problem z tym fragmentem: int zmienna = tablica[3]; for (int i = 0; i < 10; i++) System.out.println("Kolejna komórka to: " + tablica[i]); Nie rozumiem, o co chodzi z tą pętlą, i dlaczego tablica[i], jeżeli wcześniej jest tablica[3].
Kaczmar
<blockquote> <a href="#comment-4302" rel="nofollow"> <strong><em>Spiral:</em></strong> </a> tablica[i] = i + 1; Nie rozumiem tego, co ten fragment właściwie robi? </blockquote> To proste, w javie tablice sie numeruje od zera a nie od jedynki- pierwsza tablica ma przypisany numer 0. My natomiast chcemy wypelnic te tablice numerami od 1 do 10 stad i+1. Gdybysmy nie napisali i+1 tylko samo i to by nam wypelnilo numerami od 0 do 9.
Sławek Ludwiczak
Tylko bym poprawił, że nie "pierwsza tablica" tylko "pierwszy element tablicy". @Spiral int zmienna = tablica[3]; Oznacza tyle, że do "zmiennej" przypisujemy wartość 4 elementu tablicy - tak jak pisał Kaczmar, numerujemy elementy od zera. Nie ma to wpływu na nic co jest wewnątrz tablicy. Co do pętli i jest tutaj takim licznikiem, który na początku ma wartość 0, później 1, 2, 3, 4....9 (dopóki spełniony jest warunek i<10). zapisując tablica[i] oznacza to, że odwołujemy się do i'tego elementu w tej tablicy, czyli do elementu o indeksie 0, 1, 2, 3, 4...9 (numerowanie od 0)
Anonim
przeczytałem 4 razy ale wkońcu rozumiem
Maro
wcale się nie pokazująte komentarze xD żałosna strona
Kaczmar
<blockquote> <a href="#comment-4388" rel="nofollow"> <strong><em>Maro:</em></strong> </a> wcale się nie pokazująte komentarze xD żałosna strona </blockquote> no w komentarzach chodzi o to zeby sie nie pokazywaly po skompilowaniu nie?! komentarze to sa wiadomosci od tworcy kodu dla osob wykorzystujacych go.
Konrad
Mam pytanko jak napisać prosty program który wyrzuci wyjątek OutOfMemoryError ? Czy poprostu zadeklarować ogromną Tablicę?????????? int i [] = new int [54342342342389356896348093598035809356];
Grzegorz
W poradniku tym dodałbym jeszcze informację o możliwości tworzenia tablic anonimowych: new int[] = {x1, x2, ...}; //rezerwacja pamięci dla tablicy Oraz o możliwości wykorzystania tej metody do ponownego inicjowania tablic bez tworzenia nowej zmiennej: int[] liczby = {1, 2, 3}; //wypełniamy tablicę liczbami 1,2,3 liczby = new int[] {4, 5, 6}; //podmieniamy elementy tablicy na nowe
KUX
Witam, Czy tablicę są przekazywane do metod na zasadzie obiektu? W sensie, nie leci sama wartosc a wartosc z referencją?
Adam
Po co 2 razy deklaruje się for? Skoro można otworzyć klamrę po 1 for, usunac drugie for i wynik bedzie ten sam. Widzę, że to częsta tendencja w przykładach o tablicach czy ma to większe znaczenie? int[] tablica = new int[10]; int zmienna = tablica[3]; for (int i = 0; i < 10; i++){ tablica[i] = i + 1; // for (int i = 0; i < 10; i++) System.out.println("kolejna komorka to " + tablica[i]); } } }
Ignacy
Czy źle napisany program może zepsuć cmd? Wszystko poszło dobrze, skompilowałem i otworzyłem program, ale po raz pierwszy mi się coś takiego pojawiło, mianowicie nic.. Świetny kurs, nawet dla takich, co nic nie wiedzą o programowaniu (jak ja). Pozdrawiam :)
capoeiramen
Siema, a ja mam inne pytanie. Jak mam zadeklarowac zmienne tablicy, ze przy wyjsciu mam string, czyli zapisuje losowe numery na tablicy int, i jak teraz zamienic tablice int na tablice string? ilosc = odczyt.nextInt(); for(int counter=1;counter<=ilosc;counter++){ losowanie = 1+los.nextInt(liczbyValue); ++wyniki[losowanie]; a dalej juz nie wiem jak zamienic wlasnie tablice "wyniki" :/
Adrian
Dlaczego java ma taki długi zapis w c++ wystarczy int zmienna[100]
Virus of Faith
Bo tak a nie inaczej.
Virus of Faith
btw chyba nie czytałeś wstępu do kursu...
Adrian
Przeczytałem i co? Coś przeoczyłem?
Virus of Faith
sporo przeoczyłeś. była mowa o tym dlaczego w c++ zapis jest krótki, a dlaczego w javie długi. z resztą przemyśl ponownie to co napisałeś - po co wchodzisz na stronę takiego kursu: żeby mówić że w c++ napiszesz to krócej?
krisol
Witam! Mam pytanie: jak usunąć wszystkie powtórzenia elementu "x" z tablicy? Z góry dziękuję za odpowiedź :)
Robert
public class Tablice { public static void main(String[] args) { int[] tablica = new int[10]; for (int i = 0; i < 10; i++) tablica[i] = i + 1; int zmienna = tablica[3]; for (int i = 0; i < 10; i++) System.out.println("Kolejna komórka to: " + tablica[i]); } } int zmienna = tablica[3]; --- CO TO ZNACZY? A DOKŁADNIEJ [3]???
Janosch
int zmienna = tablica[3] - to znaczy, "weź wartość z komórki 3 z tablicy o nazwie "tablica" i przepisz ją do zmiennej o nazwie "zmienna" typu int. [3] - to jest tak naprawdę 4 element, bo elementy w tablicy rozpoczynają się od 0. Trzeba o tym pamiętać.
Dominik
int roz = 8; double x = 0.1000000; double[] tab = new double[roz]; for(int i=0;i<8;i++){ tab[i] = x; x = x+0.3; System.out.println(tab[i]); } proste prawda. ale nie wiem czemu wynik mam taki: 0.4 0.7 1.0 1.3 1.6 1.9000000000000001 2.2 nie rozumiem przed ostatniego wyniku jak?!
Dominik
w ten sam sposób przy innych danych mi wyniki wychodzą o jedną albo dwie milionowe mniej albo węcej ale jak?
Tomek
Hej, pytanko: for (int i = 0; i < 10; i++) tablica[i] = i + 1; jak należy tutaj rozumieć ten drugi wers zaczynajacy się od wyrazu tablica? Można łopatologicznie prosić :)
Janosch
Tomku, w tej pętli zapisujesz do tablicy 10 elementowej liczby od 1 do 10, i chcesz żeby pierwszy element tablicy wynosił 1 a ostatni 10, dlatego dodajesz 1. Gdybyś nie dodał to pierwszy element wynosiłby 0, a ostatni 9. tablica[0] = 0+1 >> =1 czyli dla pierwszego elementu tablicy wstaw 1. tablica[1] = 1+1 >> =2 czyli dla drugiego elementu tablicy wstaw 2. ... tablica[9] = 9+1 >> =10 czyli dla dziesiątego elementu tablicy wstaw 10. Gdyby nie było tego miałbyś tablicę 10 elementową z wartościami od 0 do 9. tablica[0] = 0; tablica[1] = 1; ... tablica[9] = 9;