Sadrzaj:
Uvod ... 1
Varijable (promjenjive) ... 3
Input from the user ... 4
Building a basic calculator ... 4
Int tip podataka... 5
Lekcija 9: Increment Operators(increment-“dopunsko punjenje) ... 6
Lekcija 10: if naredba ... 8
Lekcija 11: Logicki operatori ... 9
Lekcija 12: switch naredba ... 10
Lekcija 13: While loop ... 11
Lekcija 14: Klase ... 12
Lekcija 15: Koristenje metoda sa parametrima ... 13
Lekcija 16: Many Methods and Instances ... 14
Lekcija 17: Constructors ... 15
Lekcija 18: Nested If Naredbe ... 16
Lekcija 19: else if naredba ... 17
Lekcija 20: Conditional Operators ... 18
Lekcija 21: Jednostavni program za izracunavanje prosjeka ... 19
Lekcija 22: for loop (petlja) ... 20
Lekcija 23: Compound Interest(interkalarna kamata) Program ... 21
Lekcija 24: do while petlja ... 22
Lekcija 27: Introduction to Arrays( array – mnostvo,poredak) ... 25
Lekcija 28: Creating an Array Table ... 26
Lekcija 29: Summing Elements of Array ... 27
Lekcija 30: Array Elements as Counters ... 27
Lekcija 31: Enhanced for loop (Poboljsana for petlja) ... 29
Lekcija:32 Arrays in methods ... 30
Lekcija 33: Multidimensional Arrays ... 31
Lekcija 34: Prikazivanje Multidimenzionalnih Array-a u vidu tabele ... 32
Lekcija 35: Metode koje rade sa nepoznatim brojem argumenata ... 33
Lekcija 36 : Time klasa ... 34
Lekcija 38 : Public, Private i this ... 36
Lekcije : 39,40 i 41 ... 38
Lekcija 42 : toString ... 40
Lekcija 43 : Composition ... 41
Lekcija 44 : Enumeration (nabrajanje) ... 42
Lekcija 45: EnumSet range ... 44
Lekcija 46: Static ... 45
Lekcija 47: More on Static ... 46
Lekcija 48: final ... 48
Lekcija 49: Inheritance(nasljedje) ... 49
Lekcija 50: GUI (Graphics User Interface) ... 51
Lekcija 55: Intoduction to Polymorphism ... 59
Lekcija: 56 Polymorphic Arguments ... 61
Lekcije: 57 Overriding Rules (najvaznija pravila) i 58 Abstract and Concrete classes ... 63
Lekcija: 59 Class to Hold Object ... 65
Lekcija: 60 Array Holding Many Objects... 66
Lekcija: 61 Simple Polymorphic Program ... 67
Lekcija 62 i 63: Jbutton ... 68
Lekcije : 64 i 65 JCheckBox ... 71
Lekcija: 66 JRadioButton... 74
Lekcije: 68 i 69 JComboBox ... 78
Lekcije 70 i 71: JList ... 80
Lekcije 72 i 73: Multiple Selection Lists ... 83
Lekcije 74,75 i 76 Mouse Events ... 85
Lekcija 77: Adapter Class ... 88
Lekcija 78: File Class ... 90
Lekcija 79: Creating Files ... 91
Lekcija:80 Writing to Files ... 92
Lekcija 81: Reading From Files ... 93
Lekcija 82: Exception Handling ... 95
Lekcija 83: FlowLayout ... 97
Lekcija 84: Drawing Grpahics ... 99
Lekcija 85:JColorChooser ... 101
Lekcija 86: Drawing More Stuff ... 104
Uvod
Java je objektno orjentisani programski jezik. Java program se sastoji od klasa tj. sav kod programa se nalzi u nekoj od klasa od koje pravimo objekte (instance klase).
Klasa se sastoji od :
1. Atributa (promjenjive) 2. Ponasanje (metoda)
Atributi su podatci na osnovu kojih se razlikuju objekti i definisani su pomocu promjenjivih. Imamo dve vrste promjenjivih :
1. Promjenjive instance: cuvaju atribute konkretnog objekta koji se razlikuje od objekata iz iste klase.
2. Promjenjive klase: cuvaju atribute koje su iste za sve objekte iste klase.
Ponasanje je sve ono sto se moze izvrsiti nad objektima klase i drugih klasa definisano je pomocu metoda. Imamo dve vrste metoda:
1. Metode instance (ukoliko metod obavlja izmjenu pojedinacnog objekta on je metod instance) 2. Metode klase (metodi klase se primjenjuju na samu klasu)
Metode i promjenjive klase imaju u zaglavlju rjec static sto oznacava da su instance tj. metode klase. U Javi moguce je nasljedjivanje klasa. Neka klasa moze nasljediti samo jednu klasu1, tj moze imati samo jednu superklasu. Takodje moze imati neograniceno podklasa ( klasa koje nasljedjuju nju). S obzirom da je cinjenica da se moze nasljediti samo jedna klasa veliko ogranicenje, postoje interfejsi koji to znatno ublazuju. Interfejs je kolekcija metoda koje ukazuju da klasa posjeduje neko ponasanje pored onoga sto nasljedjuje od nadklase.
Klasa se definise tako sto ukucamo class pa zatim ime klase, a tjelo klase je unuar viticastih zagrada kao na:
classRobot{ }
Kada pokrenemo Java program kod koji se izvrsava je kod koji se nalazi unutar metode main , klasa gdje se nalazi ta metoda se naziva glavna klasa. Tacan izgled zaglavlja metode main mora biti:
Public static void main(String args[])
U tjelu metode main je kao sto smo rekli kod koji se izvrsava i nalazi se unutar viticastih zagrada, tj puni izgled metode main zaglavlje + tjelo bio bih:
Public static void main(String args[]){
/*tjelo metode*/ }
Naravno metoda (bez obzira sto je „glavana“) ne moze da postoji samostalno vec mora da se nalazi u nekoj klasi. Pa bih u gore pomenutu klasu robot mogli staviti metodu main :
Class Robot{
public static void main(String args[]){
} //zatvorena viticasta zagrada oznacava kraj tjela metode } //zatvorena viticasta zagrada oznacava kraj tjela klase
Sada kada smo stvorili klasu Robot i u nju stavili glavnu metodu main. Mozemo napisati neki kod koji ce se izvrsiti. Npr:
Class Robot{
public static void main(String args[]){ System.out.println(„Pozdrav svjetu“); }
}
Kod koji smo mi napisali sastoji se od jedne instrucije tj: System.out.println(“Pozdrav svjetu”); . Kada pokrenemo ovj program dobicemo:
Pozdrav svjetu
System.out.println je ustvari ugradjena metoda i ona ce izbaciti ono sto navedemo unutar zagrada na
standardom izlaznom uredjaju.
Metoda je nešto poput recepta , unutar metode (recepta) su svi koraci koji su potrebni da bi se ispekala ta torta (instrukcije).
Npr da imamo metodu „ispećitortu“, koja se nalazi unutar klaseApples:
classApples {
void ispeći tortu (){ // zaglavlje metode izmješaj margarin; // korak 1 svi ovi
koraci/instrukcije su tjelo metode
stavi u tavu; // korak 2
pojedi tortu; // korak 3
} }
Varijable (promjenjive)
Kada napisemo x=73, pod x ce se podrazumjevati broj 73. Varijabli x je dodjeljena vrijednost 73
Prije nego sto krenemo raditi sa varijablom treba da definisemo vrstu varijable , to mogu biti brojevi cjeli brojevi ili int (1,2..),double brojevi sa decimalnim mjestima (3.14), lista karaktera (djordje)… Npr. Vrsta variable double (govori javi da ce raditi sa brojem koji moze imati i decimalni zarez) nakon toga joj moramo dati ime npr tuna , i dodjeliti joj vrijednost 5.28 , kao na primjeru:
class apples {
public static void main (String args[]) { double tuna = 5.28;
System.out.print(tuna) }
}
Kada pokrenemo ovaj program on ce umjesto u zagradi gdje pise tuna (System.out.println(tuna)) izbaciti vrijednost kojoj smo joj dodjelili (liniju koda ispod) tj. 5.28.
System.out.print() - znaci prikazi ovo u zagradi pod i ostani u istoj liniji (redu), dok System.out.printl() -znaci prikazi ovo u zagradi i prebaci na sledeci red (liniju) , npr:
public class apples {
public static void main (String args[]){ double tuna; tuna = 5.28; System.out.print("I'd Like"); System.out.print(tuna); System.out.println(" kg of tuna"); System.out.print("for breakfast"); } }
Kada pokrenemo ovaj kod dobicemo: I'd Like5.28 kg of tuna for breakfast
Imamo cetri naredbe koje prikazuju na ekranu cetri stvari : 1) I‟d Like
2)5.28 3)kg of tuna 4)for breakfast
4 nareda se nalazi u novom redu iz razloga sto naredba prije nje je ispisala nesto na ekranu (to nesto je
Input from the user
Jedan nacin za ulaz je da koristimo nesto sto je vec ugradjeno u javi , Scanner. Scanner uzima informacije koje korisnik kuca na tastaturi.
Java program koristi samo ono sto je potrebno, pa da bismo koristili Scanner(tastaturu) moramo da ga „importujemo“ ili unesemo , tako sto upisemo: import java.util.Scanner;
Importjava.util.Scanner;
public class ai{ public static void main(String args[]){
Scanner djordje = new Scanner(System.in); //sada mozemo vrsiti operacije sa tastaturom
System.out.println(djordje.nextLine()); }
}
djordje je scanning varijabla i ona je jednaka bilo cemu sto unesemo tastaturom.
Scanner djordje = new Scanner(System.in); -ova instrukcija znaci sta god unesemo tastaturom
skladisti u djordje varijablu. Ova nam instrukcija omogucuje da koristimo tastaturu koju smo predhodno “inportovali” ( import java.util.Scanner; )
System.out.println(djordje.nextLine()); - ova insturkcija prikazuje na ekranu djordje varijblu. Dok next.Line() znaci da ce se na prikazivanje djordje promjenjive izvrsiti tek nakon sto je definisemo tj
ukucamo nesto i pritisnemo enter .
Building a basic calculator
import java.util.Scanner; /*navodimo da cemo koristiti tastaturu*/
class apples{
public static void main(String args[]){
Scanner broj = new Scanner(System.in); double broj1,broj2,rezultat;
System.out.println("unesi broj 1"); broj1 = broj.nextDouble();
System.out.println("unesi broj 2"); broj2 = broj.nextDouble();
rezultat = broj1 + broj2; System.out.print(rezultat); }
Int tip podataka
Pored double tipa podataka koja govori da ce program raditi sa brojem koji moze imati decimalni zarez imamo i int tip podataka koji rade samo sa cijelim brojevima( od -2,147,483,648 do 2,147,483,647 ) . Kada koristimo int u operacijama sa varijablama rezultat moze biti samo cjeli broj bez obzira sto je npr. 9/2=4.5 , on ce prikazati da je 9/2=4.
import java.util.Scanner;
public class lekcija8 {
public static void main(String args[]) {
Scanner input = new Scanner(System.in);
int boys, girls, people;
System.out.println("enter number of boys"); boys = input.nextInt();
System.out.println("enter number of girls"); girls = input.nextInt();
people = boys + girls;
System.out.print("there is "); System.out.print(people); System.out.println(" people"); }
}
Kada se izvrsi insturkcija people = boys + girls; , dobicemo tacan broj ljudi tj. People. Da je npr umjesto znaka + , znak “–“ (minus) dobili bi tacnu razliku ljudi tj. People. Da je umjesto znaka + , znak * (asteriks – znak za mnozenje) dobili bi smo tacan proizvod ljudi. Vec kod djeljenja je malo komplikovanije. Kada podjelimo npr 8 /4 dobicemo broj 2 , sto je i logicno . Ali ako npr. podjelimo 11/3 dobicemo broj 3 sto nije tacan rezutat( iz razloga sto int tip podataka ne podrzava decimalna mjesta). Sem operatora djeljenja(“/” ) postoji i modul operator (“%”) koji bi kada bih smo napisali insturkciju 11%3; , kao rezultat izbacio broj 2 (jer je broj 2 ostatak kod djeljenja ova dva broja).
Lekcija 9: Increment Operators(increment-“dopunsko punjenje)
Uzmimo da imamo:
1. Import java.util.Scanner;
2.
3. public class l9increment {
4. public static void main(String args[]);{
5. Scanner input = new Scanner(System.in);
6. 7. int tuna = 10; 8. int swordfish = 20; 9. System.out.println(tuna); 10. 11. ++tuna; 12. } 13. }
Kada pokrenemo ovaj program dobicemo broj 10, zbog toga sto smo naredili da nam prikaze na ekranu vrijednost promjenjive tuna (naredba System.out.println(tuna); ), a tuna je jednaka 10.
Mi vrijednost varijable mozemo mjenjati naknadno tj nakon sto je definisemo kao sto smo uradili u liniji koda (10). tj. ++tuna; . Vrijednost promjenjive tuna je sada 11 iz razloga sto smo je povecali za jedan tako sto smo stavili ++ inkrement (sto znaci povecaj sledecu varijblu za jedan). ++tuna; znaci da je sad tuna uvecana za jedan. Isto mozemo smanjiti vrijednost varijable ako ukucamo --tuna; , varijabla tuna ce imati vrijednost 9.
Inkrementiranje i dekrementiranje mozemo raditi u letu. Npr. slobodno mozemo napisati
System.out.println(++tuna); i na ekranu ce nam se prikazati vrijednost tuna povecana za 1.
Kada stavimo ++ prije to se zove preincrementing. Npr System.out.println(++swordfish); to znaci da ce se prvo promjeni vrijednost promjenjive prije nego sto se prikaze na ekranu. Ali kada bi smo napisali System.out.println(swordfish++); prvo ce prikazati na ekranu staru vrijednost varijable tj 20 pa ce je tek onda povecati za jedan. To se zove post incrementing . npr:
1. public class Increment {
2. public static void main (String args[]){
3. int tuna = 10; 4. int swordfish = 20; 5. 6. System.out.println(++tuna); 7. System.out.println(swordfish++); 8. System.out.println(swordfish); 9. } 10. }
Kada pokrenemo program izgledace ovako:
11 //posljedica 6 liniji koda
20 //posljedica 7 linija koda
21 //posljedica 8 linije koda
Dakle promnjeniva tuna se prvo povecala pa prikazala na ekranu iz razloga sto je ++ prije nje (linija 6), dok je promjenjiva swordfish prvo prikazana na ekranu pa se tek onda povecla vrijednost ove promjenjive iz razloga sto je ++ poslije promjenjive. To da se promjenjiva swordfish povecala vidimo kada smo u 8 liniji koda pozvali da se vrijednost te promjenjive prikaze , i vidimo da vise nije 20 vec 21.
Mozemo takodje koristeci operator dodjeljivanja (=) povecati vrijednost neke varijable . npr: public class Increment {
public static void main(String args[]){ int tuna = 10; int swordfish = 20; tuna = tuna + 5; System.out.println(tuna); } }
Kada pokrenemo ovaj program dobili bih smo rezultat 15. To je iz razloga sto smo promjenjivoj tuna dodjelili vrijednost tuna + 5 (10+5).
Ako zelimo mozemo vrijednost varijable povecati, smanjiti pomnoziti sa nekim drugim brojem (da nije jedan) mozemo koristi operatore:
+= , kada bismo napisali tuna +=5; vrijednost bi se povecala za 5.
-= , kada bismo napisali tuna -=5; vrijednost bi se smanjila za 5.
*= , kada bismo napisali tuna *=5; vrijednost bi se pomnozila sa 5.
Lekcija 10: if naredba
Pomocu if naredbe komjuter donosi odluke. Sintaksa: If (/*uslov ili test, koji nam daje dva izbora*/) {
/*prvi dio koda ako je uslov tacan*/}
else
{/*drugi dio koda ako je test netacan*/} , npr : public class lekcija10ifstat {
public static void main(String args[]){ int test = 6;
if (test == 9){
System.out.println(“this is same”); }else {
System.out.println(“this isn’t same”); }
} }
Kada pokrenemo ovaj program ispisace se: „this isn't same“ zato sto promjenjiva test nije jednaka 9,
pa se izvrsava dio koda pod else. Da je vrijednost promjenjive test 9 onda bih kao rezultat pokretanja programa dobili „this is same“, jer je test promjenjiva jedanka 9 i izvrsava se dio koda kada je test tacan.
Kao sto vidimo u testu se odlucuje koji dio koda ce se izvrsiti. Ako je test tacan izvrsice se dio koda odmah poslije uslova u viticastoj zagradi (u ovom primjeru to je naredba System.out.println(„this is
same“); . Ako test nije tacan izvrsice se dio koda koji se nalazi odmah poslije else u viticastim
zagradama (U ovom primjeru to je System.out.println(„this isn't same“);).
u zagradi u kojoj se nalazi uslov ili test u ovom primjeru pise sledece:
if (test == 9)
ovo „ == “ je uslovni operator a ima ih 7:
1. == , da li je test promjenjiva tacno jednaka 9 (ne koristimo jedno =, zato sto je to operator dodjeljivanja).
2. != , da li test promjenjiva nije jednaka 9 if (test != 9) 3. > da li je test promjenjiva veca od 9 if (test > 9) 4. < da li je test promjenjiva manja od 9 if (test < 9 ) 5. >= da li je test promjenjiva veca ili jednaka 9 if (test >=9) 6. <= da li je test promjenjiva manja ili jedanka 9 if (test <= 9)
Lekcija 11: Logicki operatori
Postoje dva logicka operatora :
1) And ( sto znaci i ) u javi se pise && 2) Or (sto znaci ili ) u javi se pise ||
U if testu mozemo napraviti vise uslova pomocu „&&“ ili „ || “ logickih operatora. If( test1 && test2); ili if(test1 || test2); Npr:
1. public class LogicOperator{
2. public static void main(String args[]){ 3. int boy = 17, girl = 20;
4.
5. if(boy>18 && girl>18){ //test 1 6. System.out.println("you can enter");
7. }else{
8. System.out.println("you can't enter");
9. }
10.
11. if(boy>18 || girl>18){ //test 2 12. System.out.println("you can enter");
13. }else{
14. System.out.println("you can't enter");
15. }
16. } 17. }
Kada pokrenemo ovaj program dobicemo:
you can't enter //posljedica testa 1
you can enter // posljedica testa 2
Kao sto vidimo imamo dva testa : test1 tj. if( boy >18 && girl >18) i test2: if(boy>18 || girl>18). Ova dva testa na oko izgledaju isti ali se razlikuju u jednoj bitnoj stvari , tj. razlikuju se na nacin na koji su uslovi unutar testa povezani. Kod testa 1 uslovi su povezani sa operatorima && , sto znaci da oba uslova ( i boy > 18 i girl > 18 ) moraju biti ispunjena da bih se izvrsio dio koda kada je test tacan. Mi kao izvrsavanje prve if naredba imamo rezultat: you can‟t enter, iz razloga sto je 18 vece od promjenjive boy, pa se izvrsava dio koda pod else. Dok kao izvrsavanje druge if naredbe imamo rezultat: you can enter , iz razloga sto je girl>18 (a potrebno je da samo jedan uslov od dva bude tacan
Lekcija 12: switch naredba
switch naredba testira jednu varijablu (promjenjivu) i zavisno od te promjenjive daje nam vise izbora.
sintaksa izgleda ovako :
switch(/*promjenjiva koja se testira*/) {
case 1: // case znaci slucaj, 1 znaci: ako je vrijednost promjenjive kojda se testira 1 System.out.println(); //ono sto ce se izvrsiti u slucaju da je vrijednost promjenjive koja se tesitira ==1
break; // break znaci ako je case 1 da stane sa izvrsenjem instrukcije switch
case 2:
break;
case n: //n je bilo koji broj
break;
default: //default koji je rjesenje kada nijedan od slucajeva tj. case nije zadovoljen
break; }
primjer:
public class Switch{
public static void main(String args[]){
int age = 7;
switch(age){ case 1:
System.out.println("you are young"); break;
case 2:
System.out.println("you can crawl"); break;
case 10:
System.out.println("you are old motherfucker"); break;
default:
System.out.println("there isn't specified"); break;
} } }
Kada pokrenemo ovaj program gore dobicemo: there isn‟t specified , iz razloga sto je vrijednost age
promjenjive 7 pa se izvrsva default dio koda jer nemamo naznacenu opciju da je vrijednost 7. Imamo opcije da je vrijednost godina 1,2 ,10 i default (ono sto se izvrsava kada nijedno od ovih opcija nije). Da je vrijednost promjenjive age npr. 10 onda bih kao rezultat dobili : you are old motherfucker , iz
razloga sto imamo definisano sta da se izvrsi kada je vrijednost promjenjive age jednako 10 (case 10: tj. System.out.println(“you are old motherfucker”); ).
Kao sto mozemo primjetiti poslije svakog slucaja (ukljucujuci i default) smo stavili break , sto znaci da kada se nadje trazeni slucaj vise se nece dalje provjeravati vec ce se switch naredba zavrsiti. Npr: da je vrijednost promjenjive age jedanko 1 , i da nemamo break; unutar koda koji ce se izvrisiti u slucaju da je age jednako jedan , program bi provjeravao sve ostale slucaje.
Lekcija 13: While loop
U prevodu loop znaci petlja. while nam omogucava da izvrsavamo dio koda vise puta , a da ga napisemo samo jednom. Sintaksa je sledeca:
while ( /* u zagradi se nalazi test*/ ) {
/* sve sto je unutar viticastih zagrada tj tjela petlje ce se izvrsavati iznova sve dok je zadovoljen test */}
primjer:
public class While{
public static void main(String args[]){
int counter = 0; while(counter<10){
System.out.println("ovo je " +counter+" iteracija ove petlje"); counter++;
} } }
Kada pokrenemo ovaj program dobicemo: ovo je 0 iteracija ove petlje ovo je 1 iteracija ove petlje ovo je 2 iteracija ove petlje ovo je 3 iteracija ove petlje ovo je 4 iteracija ove petlje ovo je 5 iteracija ove petlje ovo je 6 iteracija ove petlje ovo je 7 iteracija ove petlje ovo je 8 iteracija ove petlje ovo je 9 iteracija ove petlje
Kao sto vidimo instrukcija : System.out.println(“ovo je “+ counter + “ iteracija ove petlje”); je ponovljena 10 puta. Ona je ponovljena 10 puta iz razloga sto je trebalo deset puta da se izvrsi tjelo petlje i da se inkrementira promjenjiva counter (tj counter++) da bih na kraju kada je dostigla vrijednost 10 nije vise bio zadovoljen test (counter < 10 , tj. 10 < 10 , nije tacno) i petlja je zavrsena. Promjenjivu counter ( u prevodu brojac) smo definisali izvan same petlje , a koristili smo je unutar
while petlje. Promjenjiva koja kontrolise while petlju ne mora se zvati “counter” vec to moze biti bilo
Lekcija 14: Klase
U stvarnom svjetu mozemo vidjeti puno idividualnih objekata iste vrste. Npr. mozemo vidjeti puno bicikala , ali svaki od njih je uradjen po istom nacrtu sto ga i cini biciklom. U objekto orjentisanom programiranju biciklo je instanca klase, dok nacrt koji sluzi da se napravi biciklo predstavlja klasu. Klase se sastoje od promjenjivih i metoda.
Imamo dve vrste promjenjivih:
Promjenjive instance koje cuvaju atribute konkretnog objekta koji se razlikuje u slucaju razlicitih objekata iste klase.
Promjenjive klase cuvaju atribute koji su jedinstveni za sve objekte iste klase ( definise se na nivou klase i cuva se samo jedna vrijednost koja kad se promjeni mjenja se za sve objekte te klase)
Takodje imamo dve vrste metoda:
Metode instance : ukoliko metoda obavlja izmjenu pojedinacnog objekta.
Metoda klase : se primjenjuje na samu klasu.
Promjenjive/ metode klase mozemo prepoznati po tome sto u zaglavlju imaju static.
Klase su organizovane u hierarhijsku strukturu. Moguce je nasljedjivanje. Klasa moze nasljediti samo jednu klasu , dok klasa koje nasljedjuju neku klasu moze biti neograniceno.
Klasa koja nasljedjuje neku drugu klasu naziva se izvedena klasa (podklasa) dok klasa koja se nasljedjuje naziva se nadklasa (superklasa). Na vrhu hierarhije Java klasa je klasa Object. Sve klase nasljeduju ovu klasu. void znaci da ce metoda raditi nesto (return je suprotno od void i znaci da kada se izvrsi metoda da ce se neka vrijednost vratiti tj. “return”).Svaki put kada vidimo public ispred imena klase to znaci da ce biti dostupna ostalim klasama za koristenje, to isto vazi i za metode. Npr klasa Tuna:
public class Tuna { /*klasa*/ public void SimpleMessage(){ /*metoda*/
System.out.println("This is another class named Tuna"); }
}
Kao sto vidimo klasa tuna ima metodu kojoj je SimpleMessage. Kada pokrenemo ovaj program gore nista se nece desiti iz razloga kada pokrenemo Java program on trazi main metodu. Medjutim instancu ove klase (tj. objekat) mozemo kreirati u nekoj drugoj klasi koja sadrzi main metodu. Kreiracemo instancu ove klase u klasi Apples :
public class Apples {
public static void main(String args[]){ Tuna t = new Tuna();
t.SimpleMessage(); }
}
Prvo sto moramo uraditi u main klasi jeste da kreiramo objekat za klasu koju zelimo ubaciti. Objekat
se kreira tako sto ukucamo :
ImeKlaseOdKojePravimoObjekat imeObjekta = new ImeKlaseOdKojePravimoObjekat ( ); tj u ovom slucaju Tuna t = new Tuna( );. Sada kada imamo kreiranu instancu klase Tuna koju smo nazvali t¸
pomocu nje mozemo pozivati metode klase Tuna i pristupati promjenjivim klase Tuna. Metodi pozivamo tako sto ukucamo: ImeObjektaKlase.imeMetode( ); , tj. u ovom slucaju t.SimpleMessage();
Lekcija 15: Koristenje metoda sa parametrima
U ovom primjeru cemo imati dve klase glavnu klasu Apples i vanjsku Tuna. Klasa Tuna : public class Tuna {
public void SimpleMessage(String name){ System.out.println("Hello" + name) }
}
Kao sto vidimo ova klasa ne moze samostalno funkcionisat jer nema glavnu klasu i jer promjenjiva
name nije definisana. Ono sto se nalazi u zagradama poslije naziva metode (tj. u ovom slucaju : SimpleMessage) je argument (tj.u ovom slucaju : String name). A argument ili ekstra parametar je
neka informacija koja je potrebna metodi da bih funkcionisala. Kada bismo pokrenuli ovaj program dobili bih smo samo Hello bez name iz tog razloga nam je potreban argument tj (String name).
Glavna klasa Apples:
import java.util.Scanner; public class Apples {
public static void main(String args[]){
Scanner input = new Scanner(System.in); Tuna TunaObject = new Tuna();
System.out.println(" Enter your name "); String name = input.nextLine();
TunaObject.SimpleMessage(name); }
}
Prvo smo unijeli Scanner jer cemo koristiti tastaturu ( import java.util.Scanner; ). Zatim smo napisali
Scanner input = new Scanner (System.in); kako bi smo ono sto napisemo koristeci tastaturu
skladistili u input promjenjivu tipa Scanner. Onda smo kreirali objekat TunaObject ( Tuna
TunaObject = new Tuna(); ) jer bez njega ne mozemo koristiti nista iz klase Tuna. Dalje kod String name = input.nextLine(); imamo promjenjivu name i tu smo definisali da je ona jedanka bilo cemu
sto ukucamo tastaturom(input.nextLine() ) . I zadnja linija koda tj. TunaObject.SimpleMessage
(name); ustvari kaze , Iz klase Tuna pokreni metodu Simple.Message i prosljedi kao trazeni argument
promjenjivu name.
Kada pokrenemo ovaj program dobicemo opciju da nesto upisemo, mi cemo upisati npr. Djordje i program ce nam vratiti : Hello Djordje .
Lekcija 16: Many Methods and Instances
Koristicemo dve klase, Apples kao glavnu i Tuna kao sporednu. Klasa Tuna : 1. public class Tuna {
2.
3. private String girlname; 4.
5. public void setName(String name){ 6. girlname = name;
7. }
8. public String getName(){ 9. return girlname; 10. }
11. public void saying(){
12. System.out.printf("My firs gf was $s", getname()); 13. }
14. }
Postoje dve vrste promjenjivih public i private. private promjenjive, oznacavaju da samo metode unutar te klase mogu je koriste.
U (3) liniji koda smo kreirali promjenjiva girlname tipa String koja je private promjenjiva. Poslije nje u (5) liniji koda vidimo metodu Setname tj tacno: public void Setname(String name) , vidimo da ova metoda zahtjeva u zagradi String promjenjivu, i da tjelo metode zahtjevani String postavlja kao vrijednost girlname (koja je u (3) liniji koda kreirane). Kod druge metode (8 linija koda) getname nemamo parametara u zagradama ali pise: public String getname(), String znaci da ce ova metoda vratiti String pa posljedicno tome u tjelu imamo naredbu return girlname ( return znaci da vraca vrijednost promjenjive girlname). Kod trece metode tj: public void saying () imamo insrukciju
System.out.printf(“My first gf was %s”, getname()) , gdje god imamo %s moramo poslije zareza
odrediti koji “String” zelimo staviti na mjesto %s. Mi smo poslije zareza stavili getname(), sto znaci da ce umjesto %s ici vrijednost koju ima getname(). Glavna klasa ima sledeci izgled:
import java.util.Scanner; public class Apples{
public static void main(String args[]){ String temp;
Tuna t = new Tuna();
Scanner input = new Scanner(System.in);
System.out.println("Napisite ime djevojke"); temp = input.nextLine();
t.setName(temp); t.sayName(); }
}
Kod String temp smo napravili privremenu promjenjivu ( temp nema nikakvog znacenja sa temporary (privremeno) mozemo je nazvati kako bilo) , dok = input.nextLine znaci da sta god ukucamo bice smjesteno u promjenjivu temp ( temp = input.nextLine(); ). Sledece trebamo uraditi nesto sa onim sto ukuca korisnik i smjesti se u temp. TunaObject.Setname(temp); ono sto radi ova instrukcija jeste da poziva metodu Setname iz klase Tuna i kao zaghtjevani String joj prosljedjuje temp. Zatim zadnja instrukcija TunaObject.saying(); poziva metodu saying iz klase Tuna koja u svom tjelu poziva metodu getname (takodje iz klase Tuna , koja vraca vrijednost promjenijive girlname) koja se prikazuje unutar instrukcije: System.out.printf(“My first gf was %s”, getname ());.
Lekcija 17: Constructors
Constructor nam dozvoljava da inicijaliziramo promjenjivu cim kreiramo objekat. Npr, kao u proslom primjeru imacemo dve klase Apples i Tuna. U Tuna klasi cemo napraviti Constructor. On se pravi isto kao i metoda samo sto ime constructora mora biti isto kao ime klase u kojoj se nalazi.
public class Tuna { private String girlname;
public Tuna(String name){ /*constructor*/ girlname = name; /*constructor*/
} /*constructor*/
public void Setname(String name){ girlname = name;
}
public String getname(){ return girlname; }
public void saying(){
System.out.printf("My firs gf was %s", getname()); }
}
Dakle : public Tuna(String name) – je konstruktor, i on ima samo jednu funkciju tj. da inicijalizuje kreiranu instanuc klase. Tj da rukovodi sa onim sto stavimo u zagradi poslije new imeKlase ( u ovom primjeru “bla1” i “bla2”).
public class Apples {
public static void main(String args[]){
Tuna t1 = new Tuna("bla1"); /*jedan objekat klase Tuna*/ Tuna t2 = new Tuna("bla2"); /*drugi objekat klase Tuna*/ t1.saying();
t2.saying(); }
}
Sada imamo constructor u klasi Tuna koji radi sa kreiranim objektima koji imaju jedan String argument. U klasi Apples smo kreirali dva objekta i u zagradi stavili po jedan String argument (sto znaci da ce se ovi objekti cim se kreiraju obratiti konstruktoru klase Tuna koji zahtjeva jedan String argument).
Razmortrimo kreiranje prvog objekta: Tuna t1 = new Tuna (“bla1”);, Dakle kreirali smo objekat t1 koji je instanca klase Tuna. “bla1” se automatski prosljedjuje konstruktoru klase Tuna , tj. prosljedjuje se : public Tuna (String name) , koji u svom tjelu ima naredbu girlname = name; sto znaci da ce “bla1” biti postavljeno za vrijednost girname promjenjive objekta t1. Isto je kod objekta t2 samo sto ce njegova vrijednost girlname biti “bla2”.
t1.saying – je pozivanje metode saying klase Tuna koja prikazuje vrijednost atributa girlname za dati
Lekcija 18: Nested If Naredbe
Umjesto da imamo samo jednu akciju ako je test , tacan ili netacan mozemo imati vise njih, npr: public class Apples {
public static void main(String args[]){ int age = 60;
if(age < 50){
System.out.println("you are young"); }else{
System.out.println("you are old"); if(age < 75){
System.out.println("you’re really old"); }else{ System.out.println("don't worry"); } } } }
Kada pokrenemo ovaj program dobicemo rezultat : you are old
you are really old Sve ovo je ugnjezdjena if naredba:
if(age < 50){
System.out.println("you are young"); }else{
System.out.println("you are old"); if(age < 75){
System.out.println("you’re really old"); }else{
System.out.println("don't worry"); }
}
Ovo sto je napisano plavim slovima je ono sto ce se dogoditi ako je test zadovoljen ( age < 50 ). Napisano crvenim slovima je ono sto ce se dogoditi ako test nije zadovoljen. Poslije prvog else koji je pocetak onog sto ce se dogoditi ako test nije zadovoljen nije zatvovrena viticasta zagrada vec je dodano novo if sa svojim else i tako se moze uraditi napisati dosta onoga sto ce se dogoditi ako test nije zadovoljen . Zagrada oznacena zelenom bojom je zagrada koja znaci zavrsetak onoga sto ce se dogoditi ako prvobitni test ( age <50 ) nije zadovoljen. U glavnome else svako if i svako else mora imati zatvorenu viticastu zagradu.
Lekcija 19: else if naredba
else if naredba je nacin da damo javi vise opcija. Jednostavna if naredba izgleda npr ovako:
public class Apples {
public static void main(String args[]){ int age = 55;
if(age > 60){
System.out.println("You are a senior citizen"); }else{
System.out.println("You are a young buck");} }
}
Dakle jednostavna if naredba nudi jednu opciju ako je test tacan i drugu else opciju ako test nije tacan.
else if naredba je nesto poput dodatne opcije. I mozemo imati else if alternativa koliko hocemo.
Primjer :
public class Apples {
public static void main(String args[]){ int age = 45;
if(age > 60)
System.out.println("You are a senior citizen"); else if(age >= 50)
System.out.println("You are in your 50s"); else if(age >= 40)
System.out.println("You are in your 40s"); else
System.out.println("You are a young buck"); }
}
else if se uvjek stavlja izmedju glavnog if( if(age > 60 ) i zadnjega else. Moze se izvrsiti samo jedna
od ovih naredbi :
1. if(age > 60) , System.out.println(“you are a senior citizen”); 2. else if(age >=50), System.out.println(“you are in your 50s”); 3. else if(age>=40), System.out.println(“You are in your 40s”); 4. else , System.our.println(“You are a young buck”);
To funkcionise ovako: promjenjiva age je 45, on pita pod (1) da li je age vece od 60, odgovor je ne. Zatim pita pod (2):da li je age vece ili jednako 50), odgovor je ne. Zatim pita pod (3): da li je age vece ili jednako 40 , odgovor je da i izvrsava se naredba pod(3) tj: System.out.println(“You are in your
40s”); . Zato cemo na ekranu imati ispisano “You are in your 40s”. Dakle kada naidje na pozitivan
Lekcija 20: Conditional Operators
Conditional operators su drugi nacin koriscenja if else naredbe ali su veoma kompaktni i veoma mali. Npr:
public class Apples {
public static void main(String args[]){ int age = 21;
System.out.println(age > 50 ? "you are old" : "you are young"); }
}
Treba obraditi paznju na System.out.println(age > 50 ? “you are old” : “you are young”); . Prvo sto trebamo uraditi jeste da zadamo test ( u ovom primjeru age > 50 ) nakon sto zadamo test stavljamo upitnik “?”I ono sto age > 50 ? radi jest da gleda da li je age vece od 50. Nakon Upitnika moramo staviti sta da izbaci na ekranu ako je true (tj. ako je age > 50) i odvojeno “ : “ sta da izbaci na ekranu ako je false( tj ako age nije vece od 50 ).
Rezultat izvrsavanja ovog programa je : you are young
Lekcija 21: Jednostavni program za izracunavanje prosjeka
Napisali smo program za izracunavanje prosjeka 10 brojeva koje unesemo:
import java.util.Scanner; public class Apples {
public static void main(String args[]){
Scanner input = new Scanner(System.in);
int ukupno = 0; int broj; int prosjek; int counter = 0; while(10>counter){ broj = input.nextInt(); ukupno = broj + ukupno; counter++; }
prosjek = ukupno / counter;
System.out.println("Your average is:" + prosjek); }
}
Unijeli smo tastaturu, omogucili da je koristimo koristeci Scanner promjenjivu input. Zatim smo kreirali 4 promjenjive tipa int :
1. ukupno – koji ce izracunati ukupan zbir 10 brojeva koje unesemo. 2. broj-to ce biti svaki pojedinacni broj od 10 koje unesemo.
3. prosejek- on ce skladistiti srenju vrijednost.
4. counter ili brojac ce nam sluziti da izbroji koliko smo brojeva unijeli. Zatim imamo while petlju:
while(10>counter){
broj = input.nextInt(); ukupno = broj + ukupno;
counter++; }
Sve dok je 10 vece od promjenjive counter ( 10 > counter) on radi sledece operacije: 1. broj = input.nextInt(); tj. sve sto ukucamo skladisti se u varijablu broj. Zatim
2. ukupno = broj + ukupno; tj izracunava ukupan zbir svih brojeva koje smo unijeli tako sto promjenjivoj ukupno dodjeli zbir prijasnje vrijednosti promjenjive ukupno i novi broj u vidu promjenjive broj. I na poslijetku imamo pod
3. counter++; sto znaci da ce se svaki put kad se ponovi while naredba promjenjiva counter povecati za jedan.
Kada se zavrsi naredba while tj kad 10 ne bude vise vece od promjenjive counter program prelazi na sledecu liniju koda tj. prosjek =ukupno / counter; sto je nacin da izracunamo prosjek tako sto podijelimo ukupni zbir brojeva koje smo unijeli i counter (koliko smo brojeva unijeli ).
Na kraju imamo naredbu System.out.println(“You average is : “ + prosjek) , koja govori izbaci na ekranu “Your average is “ i vrijednost promjenjive prosjek.Vidimo iznad kako smo to izveli.
Lekcija 22: for loop (petlja)
For petlja zahtjeva 3 argumenta da bih radila, argumenti su razdvojeni sa “ ; ” . Konstrukcija for petlje je: for( argument1;argument2;argument3)
argument 1: brojac
argument 2: test (provjerava se npr. da li je argument1 veci od 10
argument3: odredjujemo za koliko da se mjenja argument 1 Primjer:
public class Apples {
public static void main(String args[]){
for (int counter=1;counter<=10;counter++){
System.out.println(“ovo je “ +counter+ “iteracija petelje”); }
} }
U ovom primjeru petlja for izgleda: for (int counter=1;counter<=10;counter++).
Argument1 ili int counter=1 , znaci da smo napravili promjenjivu counter (tipa int) cija je vrijednost 1 , sto znaci da nam petlja pocinje od 1.
Argument2 ili counter<=10; znaci da ce se petlja izvrsavati sve dok je 10 vece ili jedanko promjenjivoj counter (argument 1).
Argument3 ili counter++; ,znaci da ce se promjenjiva counter uvecavati za 1 prilikom svake iteracije.
Nakon svega toga tj: for (int counter=1;counter<=10;counter++) otvaramo viticastu zagradu da definisemo sta ce ova petlja raditi(naravno moramo tu zagradu i zatvoriti kada to definisemo). Unutar viticaste zagrade mi smo stavili System.out.println(counter); sto znaci da ce se sve dok se vrti petlja na ekranu u svakoj sledecoj liniji prikazivati vrijednost promjenjive counter. tj dobicemo sledece:
ovo je 1 iteracija petlje ovo je 2 iteracija petlje ovo je 3 iteracija petlje ovo je 4 iteracija petlje ovo je 5 iteracija petlje ovo je 6 iteracija petlje ovo je 7 iteracija petlje ovo je 8 iteracija petlje ovo je 9 iteracija petlje ovo je 10 iteracija petlje
Lekcija 23: Compound Interest(interkalarna kamata) Program
Napravicemo program koji ce izracunavati koliko ce se povecavati odredjeni broj(npr racun u banci) ako je kamata 4% , kroz 10 godina. Primjer:
public class Apples {
public static void main(String args[]){ double iznos;
double trenutniiznos=7000; double kamata= 0.04;
for(int year=1;year<=10;year++){
iznos= trenutniiznos*Math.pow(1+ kamata, year); System.out.println(year + " " + iznos);
} }
}
Kada pokrenemo ovaj program dobicemo koliki ce nam iznos biti za 10 godina , tj: 1 7280.0 2 7571.200000000001 3 7874.048000000001 4 8189.009920000001 5 8516.5703168 6 8857.233129472 7 9211.522454650882 8 9579.983352836918 9 9963.182686950395 10 10361.709994428411
Math.pow je vanjska metoda koja ima dva argumenta. Math.pow( argument1, argument2).
Argument1 je u ovom slucaju 1+kamata a Argument2 je eksponent(je broj koji pokazuje koliko puta argument1 treba pomnoziti sam sa sobom) u ovom slucaju year puta.
Iznos = trenutniiznos*Math.pow( 1+kamata, year), funkcionise na sledeci nacin , trenutniiznos se
mnozi sa 1+kamata(sto je uvjek 1.04 ili 4%) year puta. U godini jedan iznos=7280 iz razloga sto je 7000(trenutniiznos)*1.04 jednako 7280. U drugoj godini imamo iznos=7571.2 iz razloga sto je 7000*1.0816=7571.1 (imamo dva puta 1.04 iz razloga sto je year=2) . Dakle Math.pow je nacin da dobijemo kvadrat nekog broja . npr Math.pow(4,3) dobicemo rezultat 43 tj.64.
Lekcija 24: do while petlja
Ono sto do while petlja radi jeste da izvrsi tjelo (body) petlje prije nego sto provjeri test , tako da nam je zagarantovano da ce se tjelo izvrsiti bar jednom. Tjelo se nalazi unutar viticastih zagrada . do while Izgleda ovako: do{ Instrukcija1; Instrukcija2; }while( test) Npr:
public class Apples {
public static void main(String args[]){ int counter=0; do{ System.out.println(counter); counter++; }while(counter<=10); } }
Kada pokrenemo ovaj program dobicemo izlistane brojeve od 1 do 10 tj: 1,2,3,4,5,6,7,8,9,10 (jedan ispod drugog). Tako da se cini da je do while petlja ne razlikuje od while petlje ali postoji razlika koju cemo ilustrovati na primjeru koji slijedi:
public class Apples {
public static void main(String args[]){ int counter=15; do{ System.out.println(counter); counter++; }while(counter<=10); } }
Jedina razlika izmedju ova dva koda je u promjenjivoj counter. U prvom primjeru je counter=1 dok je u drugom primjeru counter=15. Kada pokrenemo drugi program( counter=15 ) na ekranu ce se ispisati samo broj 15 iz razloga sto se prvo izvrsava tijelo petlje (u ovom slucaju
System.out.println(counter); counter++; ) pa tek onda se provjerava test (tj da li se treba dalje
izvrsavati petlja) (counter <=10 ). Izvrsilo se tjelo program je pokazao vrijednost 15 (System.out.println(counter);) zatim se counter povecao za 1 (counter++) pa je tek onda pokrenut test ( counter <=10 ) gdje se utvrdilo da 10 vise nije vece ili jednako counter( koji je 15) pa se izvrsavanje petlje prekida. Dobijeni rezultat nakon pokretanja programa izgleda ovako:
Lekcija 25: Ugradjene matematicke metode
Sve metode iz matematicke klase pocinju sa Math zatim ide tacka (.) i metoda. Neki primjeri
Math.metoda:
1) Math.abs(broj) - absolute value bilo koji broj stavimo u zagradu bio on pozitivan ili negativan bice prikazan bez predznaka tj razlika tog broja do 0.
2) Math.ceil(broj) - bilo koji decimalni broj koji stavimo u zagradu bice zaokruzen navise 3) Math.floor(broj) - bilo koji decimalni broj koji stavimo u zagradu bice zaokruzen nanize 4) Math.round(broj) - bilo koji broj koji stavimo bice zaokruzen na najblizu vrijednost. 5) Math.max(broj1,broj2,brojn) – prikazuje broj koji ima najvecu vrijednost
6) Math.min(broj1,broj2,brojn) – prikazuje broj koji ima najmanju vrijednost
7) Math.pow(broj, eksponent) – prikazuje broj pomnosen sam sa sobom eksponent puta 8) Math.sqrt(broj) - vadi kvadratni korjen
Primjeri:
import java.util.Scanner; public class Apples{
public static void main(String args[]){
double broj1 = 3.14; double broj2 = 9;
System.out.println("apsolutna vrijednost broja1 je: " + Math.abs(broj1));
System.out.println("broj1 zaokruzen nanize je : "+ Math.floor(broj1)); System.out.println("broj2 zaokruzen navise je : "+ Math.ceil(broj2)); System.out.println("manji broj od broja1 i broja 2 je " +
Math.min(broj1, broj2));
System.out.println("veci broj izmedju broja 1 i broja 2 je: " + Math.max(broj1, broj2));
System.out.println(“najblizi cjeli broj na koji se Moze zaokruziti broj1 je: “ +Math.round(broj1));
System.out.println("broj1 na broj2 je : “ +Math.pow(broj1,broj2)); System.out.println("kvadratni korjen broja1 je "+Math.sqrt(broj1)); System.out.println("kvadratni korjen broja2 je "+ Math.sqrt(broj2)); }
}
Rezultat izvrsavanja gornjeg programa je:
apsolutna vrijednost broja1 je: 3.14 broj1 zaokruzen nanize je : 3.0 broj2 zaokruzen navise je : 9.0
manji broj od broja1 i broja 2 je 3.14 veci broj izmedju broja 1 i broja 2 je: 9.0
najblizi cjeli broj na koji se moze zaokruziti broj1 je : 3 broj1 na broj2 je 29673.367320587102
kvadratni korjen broja1 je 1.772004514666935 kvadratni korjen broja2 je 3.0
Lekcija 26: Random nuber Generator
Napravicemo program koji ce simulirati bacanje kocke sest puta (ima sest izbora:1,2,3,4,5,6) : import java.util.Random;
public class Apples{
public static void main(String args[]){
int brojBacanja = 6; int broj;
Random dice = new Random();
for(int counter=1;counter<=brojBacanja;counter++){ broj = 1 + dice.nextInt(6);
System.out.println("bacanje br: "+counter+" broj: "+ broj); }
} }
Dakle generator nasumicnih brojeva se kreira tako sto importujemo prvo java.util.Random; , zatim ukucamo : Random dice = new Random();, sto znaci da smo kreirali Random promjenjivu naziva
Dice.
Nasumicni brojevi se generisu naredbom ImeRandomPromjenjive.nextInt(/*raspon*/); , tj u nasem primjeru dice.nextInt(6); , je 6 raspon sto znaci da ce ovaj generator generisati brojeve izmedju 0 i 5. S obzirom da kocka za bacanje ima brojeve od 1 do 6 , mi cemo svakom generisanom novom broju izmedju 0 i 5 dodati 1 , sto ce nas dovesti do zeljenog rezultata na nacin: 1 + dice.nextInt(6); .
Dalje imamo for petlju koja ce se izvrsavati 6 puta , sto simulira 6 bacanja kocke. U tjelu for petlje imamo number = 1 + dice.nextInt(6); sto znaci da je promjenjiva number jedaka bilo kojem broju izmedju 0 I 5 , uvecanom za 1. I naposljetku imamo instrukciju da se tih sest bacanja prikaze na ekranu ( System.out.println(“bacanje br: “+counter+” broj: “+ broj ). Kada pokrenemo ovaj program prikazace nam se nasumicnih 6 brojeva izmedju 1 i 6.
Rezultat jednog izvrsavanja je : bacanje br: 1 broj: 4 bacanje br: 2 broj: 3 bacanje br: 3 broj: 1 bacanje br: 4 broj: 2 bacanje br: 5 broj: 6 bacanje br: 6 broj: 1
Rezultat nekog drugog izvrsavanja je drugaciji, kao i sako sledece izvrsavanje. Jedino se slucajno moze desiti da se generisu dve iste kombinacije:
bacanje br: 1 broj: 2 bacanje br: 2 broj: 3 bacanje br: 3 broj: 4 bacanje br: 4 broj: 4 bacanje br: 5 broj: 2 bacanje br: 6 broj: 2
Lekcija 27: Introduction to Arrays( array – mnostvo,poredak)
Array je promjenjiva koja moze da skladisti vise vrijednosti. Ona moze da skladisti samo vrijednosti iste vrste npr. Samo Int ili String ili double.Takodje moze da skladisti I objekte. Kada kreiramo Array prvo napisemo koje vrste ce biti podatci koje cemo skladistiti ( npr int) zatim ime array promjenjive i poslije toga kockaste zagrade [ ] te = new int[/*neki broj koji oznacava koliko ce vrijednosti ili promjenjivih biti skladisteno u ovom Array*/] Primjer:
public class Appless {
public static void main(String args[]){ int djordje[]= new int[10]; djordje[0]=10; djordje[1]=17; djordje[2]=12; djordje[3]=123; djordje[4]=15; djordje[5]=143; djordje[6]=32; djordje[7]=82; djordje[8]=8; djordje[9]=9; System.out.println(djordje[9]); } }
Int djordje[] =new int[10]; je Array koja moze imati deset vrijednosti. Kada kreiramo array moramo
zadati koliko moze sadrzavati vrijednosti/promjenjivih. S obzirom da racunar uvjek pocinje da broji od 0 , mi smo definisali prvu vrijednost tako sto smo napisali ime array-ja zatim u [] redni broj ili indeks vrijednost/promjenjive i nakon toga jednako kojoj vrijednosti. To izgleda ovako djordje[0]=10; Postoji I malo brzi nacin da definisemo vrijednosti koje ce da sadrzi. To se zove array initializator i kreira se na sledeci nacin . Prvo ukucamo vrstu podataka koje ce skladistiti ( u ovom primjeru int) zatim ime array-a sa ovim zagradama [] zatim = pa u otvorenoj viticastoj zagradi ukucamo vrijednosti kojima array sam pripise indeks iduci po redu od 0 pa nadalje. Konstrukcija je sledeca : tipPodatakaKojiseSkladisti ImeArraya [] = {element1, element2, element3, elementn} . primjer:
public class Appless {
public static void main(String args[]){ int djordje[]={1,7,6,3,2,5}; System.out.println(djordje[1]); }
}
Int djordje[]={1,7,6,3,2,5}; je isto array samo sto smo mi odmah upisali vrijednosti redom 1,7,6,3,2,5.
Isto tako redom se dodjeljuju indeksi pocevsi od nule . Br: 1 ima indeks: 0, br:7 ima indeks:1 , br:6 ima indeks:2, br:3 ima ideks:3 , br:2 ima indeks:4 I naposljetku br:5 ima indeks:5.
Iz tog razloga kada smo napisali System.out.println(djordje[4]); dobili smo broj sa indeksom 4 tj. na ekranu smo dobili broj 2.
Lekcija 28: Creating an Array Table
Kreirati cemo “tabelu” koja ce nam prikazivati koju vrijednost indeks Array-a ima. Primjer: public class Apples {
public static void main(String args[]){ System.out.println("index\tValue"); int djordje[]={14,15,16,22,10};
for(int counter=0;counter<djordje.length;counter++){
System.out.println(counter + "\t"+ djordje[counter]); }
} }
Kada pokrenemo ovaj program dobicemo sledece:
index Value //zaglavlje tabele
0 14 //prvi red
1 15 //drugi red
2 16
3 22
4 10
Dakle na pocetku smo napravili zaglavlje tabele ukucali smo: System.out.println(“index\tValue”);, ovo “ \t “ je ustvari Tab tj razmak pa zato imamo razmak izmedju index i Value sto vidimo u zaglavlu “tabele”.
Zatim smo napravili Array: int djordje[]={14,15,16,22,10,17}; , koji ima 6 elemenata. Nakon toga smo napisali for petlju: for (int counter=0;counter<djordje.length;counter++) , treba primjetiti kada smo zadavali drugi argument tj counter < djordje.length , da nismo napisali koliko puta treba da se izvrsi ova petlj vec smo napisali djordje.length, sto nam daje broj elemenata unutar Array-a djordje , sto je u ovom slucaju 6.
Naposljetku u tjelu for petlje imamo System.out.println( counter + “\t” + djordje[counter]); , gdje
se counter poistovjecuje sa indeksom elementa a djordje[counter] sa vrijednoscu koji taj indeks
ima.
S obzirom da je pocetna vrijednost counter promjenjive 0, u prvom redu “tabele” bice pod Index prikazano 0 , a pod Value vrijednost koju ima element djordje Array-a sa indeksom 0 (u ovom slucaju 14).
Djordje[counter] – counter je dakle indeks , pa ce nam djordje[counter] prikazati vrijednost
elementa sa indeksom counter. Da npr. pise djordje[1] , na ekranu bi nam se ispisalo pet puta broj 15 , jer vrijednost u djordje Array sa indeksom 1 je 15.
U samoj for petlji smo definisal sledece: int counter=0 sto znaci da counter pocinje od 0 sto nama odgovara jer i indeki u Array-ju pocinju od nule.
Lekcija 29: Summing Elements of Array
Ono sto cemo uraditi jeste da cemo sabrati sve vrijednosti unutar jednog kreiranog Array-a. Primjer: public class Apples {
public static void main(String args[]){ int djordje[]={1,2,3,4,5,6,7,8,9,10}; int sum=0;
for (int counter=0;counter<djordje.length;counter++){ sum = sum + djordje[counter];}
System.out.println("ukupan zbir je: " + sum); } }
Kada pokrenemo ovaj program ispisace se : “ Ukupan zbir je 55” , sto je tacno.
Lekcija 30: Array Elements as Counters
Napravicemo program koji ce uzeti Array elemente i skladistiti ih kao countere. Tacnije ono sto cemo uraditi jeste da cemo napraviti program koji ce simulirati bacanje kocke 1000 puta i prikazati koliko puta se pojavio koji broj u vidu tabele. Program izgleda:
import java.util.Random;
public class Apples{
public static void main(String args[]){ Random rand= new Random();
int freq[]=new int[7];
for(int roll=1;roll<1000;roll++){ ++freq[1+rand.nextInt(6)]; }
System.out.println("Face\tFrequency");
for(int face=1;face<freq.length;face++){
System.out.println(face+"\t"+freq[face]); }
} }
Kada pokrenemo ovaj program dobicemo sledece:
Face Frequency 1 179 2 176 3 148 4 163 5 169 6 164
Napravili smo Array freq [] = new int[7];, koji ce skladistiti vrijednosti koliko se puta koji indeks ponovio ( indeks posistovjecujemo sa stranom kocke dok vrijednost indeksa ce prikazivati koliko je puta kocaka pala na tu stranu). Kocka ima 6 strana , zato smo Array freq definisali da ce imati 7 elemenata sa indeksima od od 0 do 6. Da smo freq definisali da ce imati 6 elemenata, indeksi bi isli od 0 do 5 pa ne bismo mogli koristiti indeks broj 6.
Imamo for petlju koja simulira bacanje kocke 1000 puta : for(int roll=0;roll<1000;roll++) , dok tijelo petlje ima sledeci izgeld : ++freq[ 1+rand.nextInt(6) ] ; - rand.nextInt(6) ce nam generisati broj izmedju 0 i 5, zato smo stavili 1+ sto ce nam dati iluziju da generise broj izmedju 1 i 6. Taj generisani broj je indeks Array-a freq. Dok : ++freq[1+rand.nextInt(6)], znaci da ce se vrijednost elementa koji predstavlja generisani indeks povecati za 1. Dakle svaki put kada 1+ rand.nextInt(6) generise nasumican broj izmedju 1 i 6, zbog inkrementa ++ vrijednost elementa koji reprezentuje taj indeks ce se povecati za vrijednost 1. Npr situacija da 1+rand.nextInt(6) generise broj 3, pojednostavljeno bih izgledala ovako : ++freq[3] i vrijednost na koju pokazuje indeks 3 je sada uvecana za 1, da se generise 100 puta broj 3, vrijednos na koju pokazuje indeks 3 bila bi 100.
Mozemo zakljuciti da Array-ju ne mozemo promejniti broj elemenata koji moze imati , ali zato mozemo mjenjati njihove vrijednosti.
Dalje smo napravili zaglavlje tabele : System.out.println(“Face\tFrequency”) . Zatim smo napravili jos jednu for petlju koja ce prikazati nase podatke: for(int face=1;face<freq.length;face++) – face=1 iz razloga zato sto je prvi broj na kocki 1. face<freq.length je ustvari 1(face)<7(duzina array-a je 7 ) ali smo mi poceli brojati od 1, sto nam daje 6. .U tijelu te petlje imamo System.out.println( face+ ”\t”
+ freq[face]). Sto ce nam prikazati rezultate na ekranu. Rezultat jednog izvrsavanja:
Face Frequency 1 155 2 191 3 161 4 156 5 160 6 176
Drugo izvrsavanje daje drugacije rezultate:
Face Frequency 1 161 2 178 3 171 4 138 5 170 6 181
Lekcija 31: Enhanced for loop (Poboljsana for petlja)
Java je napravila mnogo laksi nacin da se radi sa Array-jima i to pomocu enehanced (poboljsane) for petlje. Ona umjesto 3 argumenta treba samo dva , za razliku od obicne for petlje kojoj je potrebno tri argumenta. Konstrukcija izgleda ovako:
for(VrstaPodataka Idenrifikator : ime array-a){
instrukcije; }
Argument 1 su vrsta podataka i indentifikator dok je argument2 ime array-a. Npr: for (int x: djordje)
- int je vrsta podataka koje skaldisti Array, x je identifikator koji u tjelu poboljsane for petlje
predstavlja promjenjivu koja skladisti vrijednost elementa sa kojim se trenutno radi(u zavisnosti od iteracije petlje), dok je djordje ime array-a. primjer:
public class Apples {
public static void main(String args[]){ int djordje[]={3,4,5,6,7}; int total=0; for(int x: djordje){ total+=x; } System.out.println(total); } }
Kreirali smo Array : int djordje[]={3,4,5,6,7} , zatim smo kreirali promjenjivu total i dali joj vrijednost 0. Nakon toga smo kreirali poboljsanu for petlju koja ima samo dva argumetna , koja izgleda: for (int x: djordje){ total+=x; } – int (pripada prvom argumentu) i oznacava tip podataka. x
– je indentifikator on ce da skladisti vrijednosti elementa Array-a dok se vrti petlja ( dakle prvi put kad
se pokrene petlja on ce skladistiti 3, drugi put 4, pa 5 zatim 6 zatim 7) zato nam kao drugi argument treba ime array-a od koji ce indentifikator x skladistiti vrijednosti. U tjelu for petlje smo stavili instrukciju total += x; - sto znaci da ce vrijednosti promjenjive total pri svakom obrtu petlje biti uvecane za x tj. vrijednos elementa array-a (koja zavisi od toga koji put se vrti petlja).
Lekcija:32 Arrays in methods
Stavicemo Array u neku metodu (koja ce svaki broj povecati za 5 ) pa cemo to prikazati na ekranu. Programski kod izgleda ovako:
public class Apples {
public static void main(String args[]){ int djordje[]={1,2,3,4,5};
change(djordje);
for(int y:djordje)
System.out.println(y); }
public static void change(int x[]){
for(int counter=0;counter<x.length;counter++){ x[counter]+=5;
} }
}
Napravili smo Array: int djordje[]={1,2,3,4,5}; ). Zatim smo napravili metodu koja kada joj prosljedimo Array koji sadrzi int podatke , svaki od njih poveca za 5.
Public static void change(int x[]) – public znaci da ce biti dostupna svima , static znaci da je metoda klase. void znamo sta znaci , dok je change ime metode. Ono sto se nalazi u zagradi tj. (int x[]) , int je vrsta dok x[] govori da cemo u ovoj metodi raditi sa Array-em koji ce u tjelu biti indeksiran sa x. Tjelo metode ima petlju: for (int counter=0<x.length;counter++) i unutar petlje instrukciju:
x[counter]+=5; koja uzima sve elemente iz pomocu indeksa (counter) i povecava ih za 5.
Kreiranja metodu potrebno je pozvati, u suprotnom ona tu samo stoji. To smo uradili u glavnoj metodi tako sto smo napisali change(djordje); change-je ime metode koju smo kreirali dok je djordje parametar koji smo prosljedili za tu metodu tj. ime array-a. Ova instrukcija
Sada kada smo povecali elemente za 5 prikazacemo to na ekranu da se uvjerimo. To smo uradili pomocu poboljsane for petlje: for(int y:djordje){System.out.println(y);} - prikazace svaki element Array-a jedan ispod drugog, to jest:
6 7 8 9 10
Napomena: Iz nekog razloga kada sam u metodu change ubacio poboljsanu for petlju, umjesto obicne, elementi se nisu vracali povecani ???
Lekcija 33: Multidimensional Arrays
Multidimenzionalni Array pravimo kada zelimo da napravimo tabelu u Javi ili da napravimo nesto sa koordinatama. Multidimenzionalni Array pravimo tako sto ukucamo prvo vrstu podataka (npr: int) zatim ime Array-a (npr. Firstarray) zatim dva para kockastih zagrada “ [] [] “ zatim znak = poslije kojeg otvorimo viticastu zagradu koja predstavlja sadrzaj Array-ja . Unutar viticastie zagrade nove viticaste zagrade predstavljaju redove, dok elementi unutar tih zagrada predstavljaju kolone.
Kreiranje multidimenzionalno Array-ja bi izgledalo ovako npr:
int imeArray-a[] []={{PrviEl.Reda1,2El.Reda1,…,N-tiEl.Reda1},{prviEl.Reda2,DrugiEl.Reda2,..,NelementReda2} }.
ili kada ne znamo sadrzaj ali znamo broj redova i kolona: int imeArray-ja [][] = new int [3][2]; , sto bi znacilo Array sa 3 reda koji sadrze po dve kolone.
Primjer:
public class Apples {
public static void main(String args[]){
int firstarray[][]={{1,2,3,4},{9,8,7,6}}; System.out.println(firstarray[1][1]); }
}
Kada pokrenemo ovaj program na ekranu ce se ispisati broj 8. Objasnjenje:
Dakle int firstarray[ ] [ ]={{1,2,3,4},{9,8,7,6}}; je multidimenzionalni Array . {1,2,3,4} predstavlja prvi red dok {9,8,7,6} predstavlja drugi red. Brojevi unutar {} viticastih zagrada predstavljaju kolone. Ako npr zelimo pristupiti broju 8 u drugom redu. Ukucamo firstarray[1][1] , firstarray je ime multidimenzionalnog array-a. Broj u prvoj kockastoj zagradi oznacava red ( s obzirom da je u prvoj zagradi broj 1 , to znaci da je to red sa brojevima {9,8,7,6} jer znamo da racunar uvjek broji od nula) dok druga zagrada oznacava koji broj iz tog reda (s obzirom da je 1 u zagradi (a racunar broji od 0) dobijamo broj 8). Kao sto vidimo i u primjeru.
Lekcija 34: Prikazivanje Multidimenzionalnih Array-a u vidu tabele
Primjer:
public class Apples {
public static void main(String[] args){
int firstArray[][]={{8,9,10,11},{12,13,14,15}}; int secondArray[][]={{30,31,32,33},{43},{4,5,6}}; System.out.println("This is the first array"); display(firstarray);
System.out.println("This is the second array");
display(secondarray);
}
public static void display(int x [][]) { for(int row=0;row<x.length;row++){ for(int col=0;col<x[row].length;col++){ System.out.print(x[row][col]+ "\t"); } System.out.println(); } } }
Kada pokrenemo ovaj program dobicemo: This is the first array
8 9 10 11
12 13 14 15
This is the second array
30 31 32 33
43
4 5 6
U Apples klasi smo napravili dva multidimenzionalna Array-a tj: firstArray i secondArray. Nakon toga smo napravili metodu koja ce prikazivati multidimenzionalne array-e kao tabele zaglavlje metode je: public static void display(int x[] []). int x [ ] [ ] – koji se nalazi unutar zagrada znaci da ce raditi sa multidimenzionalnim array-ima koji sadrze podatke tipa int.
U Tjelu metode imamo dve petlje jednu za redove drugu za kolone. Prva petlja za redove izgleda:
for (int row=0;row<x.length;row++). x.length ce prikazivati broj redova u Array( u ovom primjeru
to je 2 za firstArray - sto znaci da ce se ova petlja izvrsiti 2 puta i x.length je 3 za secondArray – sto znaci da ce se ova petlja izvrsiti 3 puta).
Unutar petlje za redove se nalazi petlja koja ide kroz kolone, zaglavlje ove petlje izgleda :
for(int col=0;col<x[row].length;col++). x[row].length je broj kolona, row reda (u ovom primjeru
kod firstarray s obzirom da ima 2 reda u prvom redu ce se prikazati 8,9,10,11 a u drugom:12,13,14,15) ili (koliko ima brojeva unutar svakog reda). Zatim u tjeluimamo
System.out.print(x[row][col]+ “\t”); - sto ce prikazati nase brojeve u zavisnosti koji put se koja petlja
vrti sto ce odrediti indekse row i col i prikazati broj sa razmakom tj. tabom jer imamo +”\t”(sto u ovom slucaju znaci da ce izmedju svakog broja staviti tab) . Izvan ove druge petlje i unutar prve poslije izvrsavanja druge petlje imamo System.out.print()- sto zapravo znaci kad se jednom izvrsi druga petlja (koja je unutar prve, i koja prikazuje brojeve unutar tog reda(u zavisnosti da li se vrti 1 ili 2 put (koji put se vrti jeste red) ) prelazimo u sledeci red.
Lekcija 35: Metode koje rade sa nepoznatim brojem argumenata
Nekada ne znamo koliko ili koje ce argumente metoda koristiti. Onda u zagradi stavimo vrstu podataka koja ce biti koristena pa poslije toga idu tri tacke onda stavimo ime promjenjive koju cemo koristiti tj:
(int…imepromjenjive). Primjer:
public class Apples {
public static void main(String args[]){ System.out.println(prosjek(2,4,6,20)); }
public static int prosjek(int...brojevi){ int total=0;
for(int x:brojevi) total+=x;
return total/brojevi.length; }
}
Kada pokrenemo ovaj program on ce nam izbaciti vrijednost 15, tj. prosjek brojeva koje smo
prosljedili u metodu prosjek. Prvo smo napravili metodu: public static int prosjek(int…brojevi) - u zaglavlju metode nema void sto znaci da ce neke vrijednost biti vracene, tj. bice vraceni int tj. cjeli brojevi jer u zaglavlju imamo int. Parametri metode: (int…brojevi) - int znacii da ce podatci biti cjeli brojevi tipa int. Tri tacke upravo znaci da neznamo koliko ce biti brojeva (dva , pet ili pet stotina cjelih brojeva) dok je brojevi Array koji ce skladistiti te brojevi unutar metode. Unutar metode prosjek kreirali smo promjenjivu total=0; i poboljsanu for petlju koja izgleda : for(int x:brojevi) I u tjelu ima: total+=x; .Takodje izvan for petlje unutar metode prosjek imamo : return total/brojevi.length;, sto ce vratiti prosjek prosljedjenih brojeva tako sto ce uzeti zbir svih brojeva koji smo izracunali pomocu for petlje i podjeliti ga sa brojem elemenata brojevi.
Nako sto smo kreirali metodu prosjek, pozvali smo tu metodu i prosljedili joj nasumican broj argumenata : System.out.println(prosjek(2,4,6,19,20,21,40,12)) - sto ce prikazati vrijedost koja se dobije pozivanjem metode prosjek sa prosljedjenim argumentima: 2,4,6 ,20.