Transcript File
Glava 2 Podaci i izrazi Podaci i izrazi • Izlazemo neke druge programske koncepte • U glavi 2 objasnjavamo: stringove karaktera osnovne (primitivne) podatke deklaracije i koristenje varijabli izraze i prioritet operatora konverziju podataka preuzimanje ulaza od korisnika Java apleti uvod u grafiku © 2004 Pearson Addison-Wesley. All rights reserved 2-2 Pregled Stringovi karaktera Varijable i dodjela Osnovni tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Apleti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-3 Stringovi karaktera • String karaktera moze biti predstavljen kao string literal stavljanjem navodnika oko teksta: • Primjeri: “Ovo je string literal." "123 Glavna ulica" "X" • Svaki karakter string je jedan objekt u Javi, definisan preko klase String • Svaki string literal predstavlja jedan String objekat © 2004 Pearson Addison-Wesley. All rights reserved 2-4 Metoda println • U programu Lincoln Glave 1, zvali smo metodu println za stampanje stringa karaktera • System.out objekat predstavlja odrediste (monitor skrin) na koji mozemo poslati izlaz System.out.println (“Sta god da si, budi dobar u tome."); objekat ime metode © 2004 Pearson Addison-Wesley. All rights reserved informacije date metodi (parameteri) 2-5 Metod print • System.out objekat daje slican servis • print metod je slican println metodu, izuzev da ne prelazi u slijedecu liniju • Dakle sve stampano poslije komande print ostaje u istoj liniji • Vidi Countdown.java © 2004 Pearson Addison-Wesley. All rights reserved 2-6 Konkatenacija (dopisivanje) stringova • Operator konkatenacije stringova (+) se koristi za dodavanje jednog stringa na drugi “Kikiriki buter " + “i zele" • Moze se koristiti i za dodavanje broja na string • String literal ne moze biti prelomljen u dvije linije programa • Vidi Facts.java (page 65) © 2004 Pearson Addison-Wesley. All rights reserved 2-7 Konkatenacija stringova • Operator + se koristi i za aritmeticku operaciju sabiranja • Funkcija koju vrsi zavisi od tipa operanada na kojima se izvodi • Ako su oba operanda stringovi, ili ako je jedan string a jedan broj, on vrsi konkatenaciju stringova • Ako su oba operatora numericki on ih sabira • Operator + se izvodi sa lijeva u desno, ali pomocu zagrada mozemo forsirati poredak • Vidi Addition.java (page 67) © 2004 Pearson Addison-Wesley. All rights reserved 2-8 Escape sekvence • Sta ako zelimo stampati navodnike? • Slijedeca linija moze zbuniti kompajler jer drugi znak navoda moze interpretirati kao kraj stringa System.out.println (“Ja kazem “Zdravo" Vama."); • Escape sekvenca je niz karaktera koji predstavljaju neki specijalan karakter • Escape sekvenca pocinje sa “beksles” karakterom (\) System.out.println (“Ja kazem \“Zdravo\" Vama."); © 2004 Pearson Addison-Wesley. All rights reserved 2-9 Escape sekvence • Neke Java escape sekvence: Escape Sekvence \b \t \n \r \" \' \\ Znacenje backspace tab newline carriage return double quote single quote backslash • Vidi Roses.java (strana 68) © 2004 Pearson Addison-Wesley. All rights reserved 2-10 Pregled Stringovi karaktera Varijable i dodjela Prosti (osnovni) tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Apleti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-11 Varijable • Varijabla je ime za lokaciju u memoriji • Varijabla mora biti deklarisana navodjenjem imena varijable i tipa informacije koju ona nosi ime varijable tip podatka int total; int brojac, temp, rezultat; Vise varijabli moze biti kreirano u jednoj deklaraciji © 2004 Pearson Addison-Wesley. All rights reserved 2-12 Inicijalizacija varijable • Nekoj varijabli mozemo dati pocetnu (inicijalnu) vrijednost u deklaraciji int sum = 0; int baza = 32, max = 149; • Kada se pozivamo na neku varijablu u programu, koristimo njenu trenutnu vrijednost • Vidi PianoKeys.java (strana 70) © 2004 Pearson Addison-Wesley. All rights reserved 2-13 Dodjela • Komanda dodjele mijenja vrijednost varijable • Operator dodjele je znak = total = 55; • Izraz na desnoj strani se izracunava i dodjeljuje u varijablu na lijevoj strani • Vrijednost koja je bila na total se gubi • Varijabli se moze dodijeliti samo vrijednost koja je u saglasnosti sa tipom u deklaraciji varijable • Vidi Geometry.java (strana 71) © 2004 Pearson Addison-Wesley. All rights reserved 2-14 Konstante • Konstanta je identifikator koji je slican varijabli osim sto zadrzava svoju vrijednost tokom izvodjenja programa • Kao sto ime kaze, to je konstanta, a ne varijabla • Kompajler daje poruku o gresci ako pokusate promijeniti vrijednost konstantne • U Javi koristimo modifikator final da deklarisemo konstantu final int MIN_VISINA = 69; © 2004 Pearson Addison-Wesley. All rights reserved 2-15 Konstante • Konstante su korisne iz tri vazna razloga • Prvo, daju smisao vrijednosti koji bi inace bio nejasan Na primjer, MAX_LOAD je jasniji nego literal 250 • Drugo, ubrzavaju upravljanje programom Ako se konstanta koristi na vise mjesta, njena vrijednost treba biti zamijenjena samo na jednom mjestu • Trece, formalno ustanovljavaju da neka vrijednost nece biti mijenjana i sprecavaju greske koje bi mogli napraviti drugi programeri © 2004 Pearson Addison-Wesley. All rights reserved 2-16 Pregled Stringovi karaktera Varijable i dodjela Prosti (osnovni) tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Apleti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-17 Prosti (osnovni) podaci • Postoji osam osnovnih tipova podataka u Javi • Cetiri predstavljaju cijele brojeve: byte, short, int, long • Dva predstavljaju realne brojeve u pokretnom zarezu: float, double • Jedan predstavlja karaktere: char • Jedan predstavlja logicke (boolean) vrijednosti: boolean © 2004 Pearson Addison-Wesley. All rights reserved 2-18 Numericki osnovni podaci • Razlika izmedju raznih numerickih tipova je u duzini, pa dakle i u vrijednostima koje oni mogu cuvati: Tip Memorija Min Vrij Max Vrij byte short int long 8 bits 16 bits 32 bits 64 bits -128 -32,768 -2,147,483,648 < -9 x 1018 127 32,767 2,147,483,647 > 9 x 1018 float double 32 bits 64 bits +/- 3.4 x 1038 sa 7 znacajnih cifara +/- 1.7 x 10308 sa 15 znacajnih cifara © 2004 Pearson Addison-Wesley. All rights reserved 2-19 Karakteri • char varijabla cuva jedan karakter • Literali karaktera su ogradjeni u apostrofe: 'a' 'X' '7' '$' ',' '\n' • Primjeri deklaracija: char najvecaOcjena = 'A'; char terminator = ';', separator = ' '; • Obratite paznju na razliku izmedju karakter varijable, koja moze nositi samo jedan karakter i objekta Stringa koji se sastoji od vise karaktera © 2004 Pearson Addison-Wesley. All rights reserved 2-20 Skupovi karaktera (kodovi) • Skup karaktera je uredjena lista karaktera, u kojoj svaki karakter odgovara jedinstvenom broju • Varijabla u Javi moze nositi svaki karakter iz skupa karaktera Unicode • Unicode kod koristi sesnaest bita po karakteru, dopustajuci 65,536 jedinstvenih karaktera • To je internacionalni kod, koji sadrzi karaktere iz raznih jezika svijeta © 2004 Pearson Addison-Wesley. All rights reserved 2-21 Karakteri • ASCII kod je stariji i manji nego Unicode, ali je jos uvijek popularan • ASCII kod je podskup Unicode koda, ukljucuje: velika slova mala slova znake interpunkcije cifre specijalne simbole kontrolne karaktere © 2004 Pearson Addison-Wesley. All rights reserved A, B, C, … a, b, c, … tacka, tacka-zarez, … 0, 1, 2, … &, |, \, … carriage return, tab, ... 2-22 Boolean • boolean vrijednost predstavlja true ili false uslove • Rezervisane rijeci true i false su jedine validne vrijednosti logickog tipa boolean kraj = false; • boolean varijabla moze takodje biti koristena za predstavljanje dva stanja, kao sto je sijalica koja moze biti on ili off © 2004 Pearson Addison-Wesley. All rights reserved 2-23 Pregled String karaktera Varijable i dodjela Prosti tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Apleti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-24 Izrazi • Izraz je kombinacija jednog ili vise operatora i operanada • Aritmeticki izrazi racunaju numericke rezultate i koriste aritmeticke operatore: Sabiranje Oduzimanje Mnozenje Dijeljenje ostatak + * / % • Ako su oba operanda aritmetickog operatora tipa floating point, tada je i rezultat tipa floating point © 2004 Pearson Addison-Wesley. All rights reserved 2-25 Dijeljenje i ostatak • Ako su oba operanda za operator dijeljenja cijeli brojevi, rezultat je cio broj (decimalni dio je odbacen) 14 / 3 jednako je 4 8 / 12 jednako je 0 • Operator ostatka (%) vraca ostatak nakon dijeljenja prvog operanda sa drugim 14 % 3 jednako je 2 8 % 12 jednako je 8 © 2004 Pearson Addison-Wesley. All rights reserved 2-26 Prioritet operatora • Operatori se mogu kombinovati u slozene izraze: result = total + count / max - offset; • Operatori imaju definisane prioritete koji odredjuju poredak u kojem se operatori izvode • Mnozenje, dijeljenje, i ostatak se izracunavaju prije sabiranja, oduzimanja i konkatenacije • Aritmeticki operatori sa istim prioritetom se racunaju sa lijeva na desno, ali se koristenjem zagrada moze forsirati red izvodjenja © 2004 Pearson Addison-Wesley. All rights reserved 2-27 Prioritet operatora • Kojim se redom izvode slijedeci operatori? a + b + c + d + e 1 2 3 4 a + b * c - d / e 3 1 4 2 a / (b + c) - d % e 2 1 4 3 a / (b * (c + (d - e))) 4 3 2 1 © 2004 Pearson Addison-Wesley. All rights reserved 2-28 Drvo izraza • Racunanje partikularnog izraza moze biti prikazano koristeci drvo izraza • Operatori koji su nize u drvetu izraza imaju visi prioritet za taj izraz + a + (b – c) / d / a b © 2004 Pearson Addison-Wesley. All rights reserved d c 2-29 Jos o dodjeli • Operator dodjele ima nizi prioritet od aritmetickih operatora Prvo se racuna izraz na desnoj strani od = operatora odgovor = suma / 4 + MAX * najmanji; 4 1 3 2 Zatim se rezultat upisuje na variablu na lijevoj strani © 2004 Pearson Addison-Wesley. All rights reserved 2-30 Jos o dodjeli • Desna i lijeva strana komande dodjele mogu sadrzati istu varijablu Prvo, jedan se dodaje na originalnu vrijednost brojac brojac = brojac + 1; Tada se rezultat zapisuje nazad u brojac (preko originalne vrijednosti) © 2004 Pearson Addison-Wesley. All rights reserved 2-31 Inkrement i dekrement • Operatori inkrementiranja i dekrementiranja koriste samo jedan operand • Inkrement operator (++) dodaje jedinicu na operand • Dekrement operator (--) oduzima jedinicu od svog operanda • Komanda count++; je funkcionalno ekvivalentna sa count = count + 1; © 2004 Pearson Addison-Wesley. All rights reserved 2-32 Inkrement i dekrement • Operatori inkrementiranja i dekrementiranja mogu biti primmijenjeni u postfiksnoj formi: count++ • ili perfiksnoj formi: ++count • Kada se koristi kao dio veceg izraza, ove dvije forme mogu imati razlicite efekte • Zbog njihove suptilnosti, operatore inkrementiranja i dekrementiranja treba pazljivo upotrebljavati © 2004 Pearson Addison-Wesley. All rights reserved 2-33 Operator dodjele • Cesto izvodimo operaciju na varijabli, a zatim pisemo rezultat u tu varijablu • Java uvodi operator dodjele da bi uprostili taj proces • Na primjer, komanda num += count; je ekvivalentna num = num + count; © 2004 Pearson Addison-Wesley. All rights reserved 2-34 Operatori dodjele • Postoji puno operatora dodjele u Javi, ukljucujuci slijedece: Operator += -= *= /= %= Primjer x x x x x © 2004 Pearson Addison-Wesley. All rights reserved += -= *= /= %= y y y y y Ekvivalentan sa x x x x x = = = = = x x x x x + * / % y y y y y 2-35 Operatori dodjele • Desna strana operatora dodjele moze biti slozen izraz • Prvo se sracuna vrijednost cijele desne strane, a onda se rezultat kombinuje sa originalnom varijablom • Dakle result /= (total-MIN) % num; je ekvivalentno sa result = result / ((total-MIN) % num); © 2004 Pearson Addison-Wesley. All rights reserved 2-36 Operatori dodjele • Ponasanje nekih operatora dodjele zavisi od tipa operanda • Ako su operandi za += operator stringovi, operator dodjele ce izvrsiti operaciju konkatenacije (dopisivanja) stringova • Ponasanje operatora dodjele (+=) je uvijek konzistentan sa ponasanjem odgovarajuceg operatora (+) © 2004 Pearson Addison-Wesley. All rights reserved 2-37 Pregled Stringovi karaktera Varijable i dodjela Prosti (osnovni) tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Apleti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-38 Konverzija podataka • Ponekad je zgodno konvertovati podatke jednog tipa u drugi tip • Na primjer, u partikularnom slucaju, moze biti potrebno tretirati integer kao realan broj u pokretnom zarezu • Ove konverzije ne mijenjaju tip varijable ili vrijednost koja se cuva u varijabli – one konvertuju vrijednost kao dio racunanja i predstavljaju je na nekoj drugoj lokaciji © 2004 Pearson Addison-Wesley. All rights reserved 2-39 Konverzija podataka • Konverziju moramo pazljivo izvoditi da ne izgubimo podatke • Konverzije prosirivanja su sigurne jer idu od manjeg tipa ka vecem (kao short u int) • Konverzije suzavanja mogu izgubiti informaciju jer one idu od veceg tipa ka manjem tipu (kao int u short) • U Javi, konverzija podataka se pojavljuje na tri nacina: konverzija dodjele promocija kasting © 2004 Pearson Addison-Wesley. All rights reserved 2-40 Konverzija dodjele • Konverzija dodjele pojavljuje se kada je vrijednost jednog tipa dodijeljena varijabli drugog tipa • Ako je novac tipa float, a dolari je int varijabla, slijedeca dodjela konvertuje vrijednost dolari u float novac = dolari • Dozvoljena je samo konverzija prosirenja pri dodjeli • Obratite paznju da se vrijednost i tip varijable dolar ne mijenja © 2004 Pearson Addison-Wesley. All rights reserved 2-41 Konverzija podataka • Promocija se desava automatski kada operator u izrazu konvertuje svoje operande • Na primjer, ako je suma tipa float i brojac tipa int, tada se vrijednost brojac konvertuje u realan broj sa pokretnim zarezom, da bi se izvrsilo slijedece racunanje: resultat = suma / brojac; © 2004 Pearson Addison-Wesley. All rights reserved 2-42 Kasting • Kasting je najmocnija, ali i opasna tehnika za konverziju • Oba, prosirenje i suzenje mogu biti ekspilicitno ostvareni kastingom vrijednosti varijable • Za kasting, tip varijable se stavi u zagrade ispred varijable koja se konvertuje • Na primjer, ako su total i brojac cijeli, ali mi zelimo float kao rezultat pri njihovom dijeljenju, mi mozemo napraviti kasting od total: resultat = (float) total / brojac; © 2004 Pearson Addison-Wesley. All rights reserved 2-43 Pregled Stringovi karaktera Varijable i dodjela Prosti tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Aplrti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-44 Interaktivni programi • Programi uglavnom trebaju neki ulaz na kojem rade • Scanner klasa daje pogodan metod za citanje ulaznih vrijednosti raznih tipova • Scanner objekat moze se setovati tako da cita ulaz iz raznih izvora ukljucujuci i vrijednosti koje korisnik unosi sa tastature • Tastatura je predstavljena objektom System.in © 2004 Pearson Addison-Wesley. All rights reserved 2-45 Citanje ulaza • U slijedecoj liniji je kreiran Scanner objekt koji cita sa tastature: Scanner unos = new Scanner (System.in); • Operator new kreira objekat tipa Scanner • Nakon sto je kreiran, Scanner objekat moze biti koristen da zove razne metode ulaza, kao sto je: odgovor = scan.nextLine(); © 2004 Pearson Addison-Wesley. All rights reserved 2-46 Citanje ulaza • Scanner klasa je dio biblioteke klasa java.util, koja mora biti importovana u program da bi je mogli koristiti • Vidi Echo.java • nextLine metoda cita ulaz sve dok ne dodje do kraja linije • Detalji kreiranja objekata I klasa bice jos diskutovani u Glavi 3 © 2004 Pearson Addison-Wesley. All rights reserved 2-47 Tokenizacija ulaza • Ako nije specifirano drugacije, razmak (white space) se koristi za razdvajanje elemenata ulaza (koje zovemo tokens) • Razmaci ukljucuju karakter razmaka, tabove, karaktere nove linije • next metoda klase Scanner cita slijedeci ulazni token i vraca ga kao string • Metode kao nextInt i nextDouble cita podatke partikularnog tipa • Vidi GasMileage.java (strana 92) © 2004 Pearson Addison-Wesley. All rights reserved 2-48 Pregled Stringovi karaktera Varijable I dodjela Prosti tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Apleti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-49 Uvod u grafiku • Nekoliko zadnjih sekcija svake glave posvecene su grafici i grafickom interfejsu korisnika (GUI) • Slika ili crtez mora biti digitalizovana za cuvanje na kompjuteru • Slika je napravljena od piksela (elemenata slike) i svaki se piksel cuva zasebno • Broj piksela koji se koriste da predstave sliku naziva se rezolucija slike • Broj piksela koji se mogu prikazati na monitoru naziva se rezolucija monitora © 2004 Pearson Addison-Wesley. All rights reserved 2-50 Koordinatni sistem • Svaki piksel mozemo identifikovati koristeci dvodimenzionalni koordinatni sistem • Kada referisemo jedan piksel u Java programu, mi koristimo koordinatni sistem sa pocetkom u gornjem lijevom uglu (0, 0) 112 X 40 (112, 40) Y © 2004 Pearson Addison-Wesley. All rights reserved 2-51 Predstavljanje boje • Crno-bijela slika moze biti sacuvana koristeci jedan bit po pikselu (0 = bijelo i 1 = crno) • Obojena slika zahtijeva vise informacije; postoji vise tehnika za predstavljanje boja • Na primjer, svaka boja moze biti predstavljena kao smjesa tri osnovne boje crvene, zelene i plave • Svaka boja je predstavljena sa tri broja izmedju 0 i 255 koji se zajedno nazivaju RGB vrijednost © 2004 Pearson Addison-Wesley. All rights reserved 2-52 Klasa Color • Boja se u Java programu predstavlja kao objekat kreiran iz klase Color • Color klasa takodje sadrzi predefinisane boje, ukljucujuci I slijedece: Objekat RGB Vrijednost Color.black Color.blue Color.cyan Color.orange Color.white Color.yellow 0, 0, 0 0, 0, 255 0, 255, 255 255, 200, 0 255, 255, 255 255, 255, 0 © 2004 Pearson Addison-Wesley. All rights reserved 2-53 Pregled Stringovi karaktera Varijable I dodjela Prosti tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Apleti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-54 Apleti • Java aplikacija je nezavisan program sa main metodom (slicno onima koje smo do sada vidjeli) • Java applet je program koji je namijenjen za transport preko Web i izvodi se koristeci neki web browser • Aplet takodje moze biti izveden koristeci appletviewer alat u Java Software Development Kit • Aplet nema main metodu • Umjesto toga, postoji nekoliko specijalnih metoda sa specificnom namjenom © 2004 Pearson Addison-Wesley. All rights reserved 2-55 Apleti • Na primjer, paint metoda se izvodi automatski I koristi se da nacrta sadrzaj apleta • Metoda paint prihvata parametar koji je objekat klase Graphics • Graphics objekat definise graphics context na kojem mozemo crtati oblike i tekst • Klasa Graphics ima vise metoda za crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-56 Apleti • Klasa koja definise neki aplet extends klasu Applet • Pri tome koristimo nasljedjivanje (inheritance), sto ce biti objasnjeno kasnije • Vidi Einstein.java (strana 97) • Aplet je ulozen u HTML fajl koristenjem tag-a koji referencira byte-kod fajl apleta • Byte-kod verzija programa se transportuje preko web-a i izvodi pomocu Java interpretera, koji je dio browser-a © 2004 Pearson Addison-Wesley. All rights reserved 2-57 HTML aplet tag <html> <head> <title>Aplet Ajnstajn</title> </head> <body> <applet code="Einstein.class" width=350 height=175> </applet> </body> </html> © 2004 Pearson Addison-Wesley. All rights reserved 2-58 Pregled Skup karaktera Varijable i dodjela Prosti tipovi podataka Izrazi Konverzija podataka Interaktivni programi Grafika Apleti Crtanje oblika © 2004 Pearson Addison-Wesley. All rights reserved 2-59 Crtanje oblika • Objasnjavamo neke metode klase Graphics, koje crtaju oblike, sa vise detalja • Oblik moze biti popunjen ili nepopunjen, zavisno od metode koja je pozvana • Parametri metode odredjuju koordinate i velicinu • Oblici sa krivinom, kao ova, obicno se crtaju sa ogranicavajucim pravougaonikom (bounding rectangle) • Luk se moze shvatiti kao dio ovala © 2004 Pearson Addison-Wesley. All rights reserved 2-60 Crtanje linije 10 150 X 20 45 Y page.drawLine (10, 20, 150, 45); ili page.drawLine (150, 45, 10, 20); © 2004 Pearson Addison-Wesley. All rights reserved 2-61 Crtanje pravougaonika 50 X 20 40 100 Y page.drawRect (50, 20, 100, 40); © 2004 Pearson Addison-Wesley. All rights reserved 2-62 Crtanje ovala 175 X 20 80 Granicni pravougaonik 50 Y page.drawOval (175, 20, 50, 80); © 2004 Pearson Addison-Wesley. All rights reserved 2-63 Crtanje oblika • Svaka povrsina ima obojenu pozadinu (background color) • Svaki graficki sadrzaj ima tekuci foreground color • Oba skupa mogu biti eksplicitna • Vidi Snowman.java (strana103) © 2004 Pearson Addison-Wesley. All rights reserved 2-64 Sazetak • U glavi 2 smo razmatrali: Stringove karaktera Proste tipove Deklaraciju i koristenje varijabli Izraze i prioritet operatora Konverziju podataka Prihvatanje korisnickog ulaza Java aplete Uvod u grafiku © 2004 Pearson Addison-Wesley. All rights reserved 2-65