58
Java te Java te č č aj aj 1. dio 1. dio Uvod Uvod Java-projekt @ ZEMRIS © 2014.

Java tečaj

  • Upload
    others

  • View
    9

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java tečaj

Java teJava teččajaj1. dio1. dioUvodUvod

Java-projekt @ ZEMRIS

© 2014.

Page 2: Java tečaj

NajvaNajvažžnije adresenije adrese

JavaJavahttp://www.oracle.com/technetwork/http://www.oracle.com/technetwork/java/javase/downloads/index.htmljava/javase/downloads/index.htmlDokumentacija APIDokumentacija API--ja:ja:http://http://docs.oracledocs.oracle.com/j.com/javaavasese

Page 3: Java tečaj

NajvaNajvažžnije adresenije adrese

Page 4: Java tečaj

NajvaNajvažžnije adresenije adrese

EclipseEclipse (trenutno (trenutno KeplerKepler))http://http://www.eclipse.orgwww.eclipse.org//((EclipseEclipse IDE IDE forfor Java EE Java EE DevelopersDevelopers))

Page 5: Java tečaj

NajvaNajvažžnije adresenije adrese

Page 6: Java tečaj

NajvaNajvažžnije adresenije adrese

Page 7: Java tečaj

Korisna adresaKorisna adresa

Knjiga u nastajanju uz ovu Knjiga u nastajanju uz ovu vjevješštinutinu

http://http://java.zemris.fer.hrjava.zemris.fer.hr/nastava//nastava/opjjopjj//

–– NE NE printatiprintati sve sve –– poglavlja se jopoglavlja se joššmijenjaju i nastajat mijenjaju i nastajat ćće kako ide vjee kako ide vješštinatina

–– U nazivu knjige gledajte najnoviji datumU nazivu knjige gledajte najnoviji datum

Page 8: Java tečaj

PodePodeššavanje varijabli okruavanje varijabli okružženjaenja

Na Windowsima JDK je tipiNa Windowsima JDK je tipiččno no instaliran u Program instaliran u Program FilesFiles\\JavaJava\\JdkJdk……::

Varijablu okruVarijablu okružženja enja JAVA_HOMEJAVA_HOMEtrebalo bi postaviti na taj direktorijtrebalo bi postaviti na taj direktorij

Page 9: Java tečaj

PodePodeššavanje varijabli okruavanje varijabli okružženjaenja

Varijabla okruVarijabla okružženja enja PATHPATH operacijskom operacijskom sustavu govori gdje da trasustavu govori gdje da tražži i programe koje korisnik programe koje korisnik žželi pokrenuti eli pokrenuti iz naredbenog retkaiz naredbenog retkaStoga u Stoga u PATHPATH treba dodati treba dodati %%JAVA_HOMEJAVA_HOME%%\\binbin i i %%JAVA_HOMEJAVA_HOME%%\\jrejre\\binbin

Page 10: Java tečaj

PodePodeššavanje varijabli okruavanje varijabli okružženjaenjaPrivremeno rjePrivremeno rješšenje: napravite datoteku enje: napravite datoteku podesi.batpodesi.bat (u (u notepadunotepadu))Neka je npr. u Neka je npr. u C:C:\\podesi.batpodesi.bat

@echo "Podesavamo staze:"@SET "JAVA_HOME=C:\Program Files\Java\jdk1.7.0_51"@SET "PATH=%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin"@echo "JAVA_HOME je postavljen na %JAVA_HOME%"@echo "PATH he postavljen na %PATH%"@echo "Verzija javinog virtualnog stroja je:"@java -version@echo "Verzija javinog prevodioca je:"@javac -version

Page 11: Java tečaj

PodePodeššavanje varijabli okruavanje varijabli okružženjaenja

Potom otvorite konzolu (Potom otvorite konzolu (CommandCommandPromptPrompt) i pokrenite datoteku:) i pokrenite datoteku:

Dalje nastavite raditi u toj konzoli Dalje nastavite raditi u toj konzoli (ako otvorite novu, ponovite (ako otvorite novu, ponovite proceduru i u njoj)proceduru i u njoj)

Page 12: Java tečaj

PodePodeššavanje varijabli okruavanje varijabli okružženjaenja

Cilj je postiCilj je postićći da kada u naredbenom i da kada u naredbenom retku zadate naredbe:retku zadate naredbe:java java --versionversion

odnosno:odnosno:javacjavac --versionversion

ne dobijete poruku pogrene dobijete poruku pogrešške veke veććispisanu verziju programaispisanu verziju programaZa detalje pogledajte u knjigu u Za detalje pogledajte u knjigu u dodatak.dodatak.

Page 13: Java tečaj

PodePodeššavanje varijabli okruavanje varijabli okružženjaenja

Ove se varijable mogu podesiti na Ove se varijable mogu podesiti na razini operacijskog sustava (u razini operacijskog sustava (u ControlControl PanelPanel--u, u, SystemSystem, , EnvironmentEnvironment VariablesVariables) pa ) pa ćće tada e tada vrijediti globalnovrijediti globalnoTada neTada nećće trebati pri svakom e trebati pri svakom pokretanju konzole pokretati pokretanju konzole pokretati podesi.batpodesi.bat..

Page 14: Java tečaj

““HelloHello WorldWorld”” programprogrampackage hr.fer.zemris.java.tecaj_1;package hr.fer.zemris.java.tecaj_1;

/**/*** Demonstracijski program.* Demonstracijski program.* @author Marko Cupic* @author Marko Cupic* @version 1.0* @version 1.0*/*/

public class public class HelloWorldHelloWorld {{

/**/*** * MetodaMetoda kojakoja se se pozivapoziva prilikomprilikom pokretanjapokretanja* * programaprograma. . ArgumentiArgumenti susu objasnjeniobjasnjeni u u nastavkunastavku..* @* @paramparam argsargs ArgumentiArgumenti iziz komandnekomandne linijelinije..*/*/

public static void public static void main(Stringmain(String[] [] argsargs) {) {System.out.println("HelloSystem.out.println("Hello World!");World!");

}}}}

Naziv paketa

Razred

Metoda main

Page 15: Java tečaj

““HelloHello WorldWorld”” programprogram

Otvorite Otvorite CommandCommand promptprompt!!Nađite mjesto gdje moNađite mjesto gdje možžete zapisivati ete zapisivati datoteke (npr. datoteke (npr. C:C:\\tecajtecaj))

UditeUdite u taj direktorij:u taj direktorij:C:C:cdcd C:C:\\tecajtecaj

Page 16: Java tečaj

““HelloHello WorldWorld”” programprogram

Napravite dva direktorija:Napravite dva direktorija:–– srcsrc –– tu tu ćće doe doćći izvorni programii izvorni programi–– binbin –– tu tu ćće doe doćći izvri izvrššivi kodivi kod

Page 17: Java tečaj

““HelloHello WorldWorld”” programprogram

Izgradite strukturu direktorija koja Izgradite strukturu direktorija koja odgovara paketuodgovara paketuhr.fer.zemris.java.tecaj_1:hr.fer.zemris.java.tecaj_1:

mkdirmkdir srcsrc\\hrhrmkdirmkdir srcsrc\\hrhr\\ferfermkdirmkdir srcsrc\\hrhr\\ferfer\\zemriszemrismkdirmkdir srcsrc\\hrhr\\ferfer\\zemriszemris\\javajavamkdirmkdir srcsrc\\hrhr\\ferfer\\zemriszemris\\javajava\\tecaj_1tecaj_1

Page 18: Java tečaj

““HelloHello WorldWorld”” programprogram

U U notepadunotepadu prepiprepiššite program, i ite program, i snimite ga u direktorij:snimite ga u direktorij:srcsrc\\hrhr\\ferfer\\zemriszemris\\javajava\\tecaj_1tecaj_1pod nazivom:pod nazivom:HelloWorld.javaHelloWorld.java

Pazite! Pazite! NotepadNotepad zna dodati jozna dodati joššekstenziju ekstenziju txttxt pa dobijete pa dobijete HelloWorld.java.txtHelloWorld.java.txt to ne valja!to ne valja!

Page 19: Java tečaj

““HelloHello WorldWorld”” programprogram

UoUoččite kako ite kako ime datoteke mora ime datoteke mora odgovarati imenu razredaodgovarati imenu razreda (ono iza (ono iza classclass), i pri tome paziti na velika i ), i pri tome paziti na velika i mala slova!mala slova!

classclass HelloWorldHelloWorld HelloWorld.javaHelloWorld.java

Page 20: Java tečaj

““HelloHello WorldWorld”” programprogram

Prevođenje programaPrevođenje programa–– morate biti pozicionirani u direktoriju morate biti pozicionirani u direktoriju

koji sadrkoji sadržži direktorije i direktorije srcsrc i i binbin

–– Zadajte:Zadajte:javacjavac ––cpcp binbin ––sourcepathsourcepath srcsrc ––d d binbinsrcsrc\\hrhr\\ferfer\\zemriszemris\\javajava\\tecaj_1tecaj_1\\HelloWorld.javaHelloWorld.java

(sve u jednom retku!)(sve u jednom retku!)

Rezultat je Rezultat je HelloWorld.classHelloWorld.classdatoteka u strukturi direktorija datoteka u strukturi direktorija unutar direktorija unutar direktorija binbin

Page 21: Java tečaj

““HelloHello WorldWorld”” programprogram

Pokretanje programaPokretanje programajava java ––cpcp binbinhr.fer.zemris.java.tecaj_1.HelloWorldhr.fer.zemris.java.tecaj_1.HelloWorld

(sve u jednom retku!)(sve u jednom retku!)Ne piNe pišše se e se ..classclass ekstenzijaekstenzija

Navodi se puno ime razredaNavodi se puno ime razreda““--cpcp binbin”” kakažže gdje da trae gdje da tražži i ..classclass(to je kao varijabla okru(to je kao varijabla okružženja enja PATHPATHza virtualni stroj koji izvodi program)za virtualni stroj koji izvodi program)

Page 22: Java tečaj

““HelloHello WorldWorld”” programprogram

Pokretanje programa Pokretanje programa –– opopćći formati formatjava java ––cpcp staze staze puno.ime.razredapuno.ime.razredaargumentiargumenti(sve u jednom retku!)(sve u jednom retku!)

““--cpcp stazestaze”” momožže biti nepotreban, e biti nepotreban, ovisno o postojanju varijable ovisno o postojanju varijable okruokružženja enja CLASSPATHCLASSPATH

Page 23: Java tečaj

““HelloHello WorldWorld”” programprogram

““HelloHello WorldWorld”” je primjer jednog je primjer jednog (javnog) razreda (engl. (javnog) razreda (engl. classclass))Ime datoteke == ime tog razredaIme datoteke == ime tog razredaRazredi se organiziraju hijerarhijski u Razredi se organiziraju hijerarhijski u pakete pakete –– slisliččno kao datoteke i kazalano kao datoteke i kazala–– packagepackage kljuključčna rijena riječč

Metode koje pripadaju samom Metode koje pripadaju samom razredu: razredu: staticstatic

Page 24: Java tečaj

““HelloHello WorldWorld”” programprogram

Pokretanje programa Pokretanje programa –– mainmain metodametodapublic static void public static void main(Stringmain(String[] [] argsargs) {) {

……}}

Argumenti iz komandne linijeArgumenti iz komandne linije–– StringString[] [] argsargs polje polje stringovastringova

Page 25: Java tečaj

Komentiranje kodaKomentiranje koda

ObiObiččni komentarini komentari–– /* komentar *//* komentar */ i i // komentar// komentar

Komentari iz kojih se generira Komentari iz kojih se generira dokumentacija (dokumentacija (javadocjavadoc komentari)komentari)–– /** /** komentarkomentar */*/

JavadocJavadoc komentari za:komentari za:–– Same razredeSame razrede–– Pojedine metodePojedine metode

Page 26: Java tečaj

Komentiranje kodaKomentiranje koda

JavadocJavadoc komentari sadrkomentari sadržže oznake e oznake oblika @naziv vrijednost, npr.oblika @naziv vrijednost, npr.–– @@authorauthor ime_autoraime_autora, npr., npr.

@@authorauthor Marko CupicMarko Cupic–– @@versionversion verzija_razredaverzija_razreda, npr., npr.

@@versionversion 1.01.0–– @param@param ime_argumentaime_argumenta opisopis

@param x broj @param x broj ččiji sinus treba izraiji sinus treba izraččunatiunati–– @@returnreturn opisopis

@@returnreturn vravraćća sinus zadanog brojaa sinus zadanog broja

Page 27: Java tečaj

Komentiranje kodaKomentiranje kodapackage hr.fer.zemris.java.tecaj_1;package hr.fer.zemris.java.tecaj_1;

/**/*** @author Marko Cupic* @author Marko Cupic* @version 1.0* @version 1.0*/*/

public class public class HelloWorldHelloWorld {{

/**/*** * MetodaMetoda kojakoja se se pozivapoziva prilikomprilikom pokretanjapokretanja* * programaprograma. . ArgumentiArgumenti susu objasnjeniobjasnjeni u u nastavkunastavku..* @* @paramparam argsargs ArgumentiArgumenti iziz komandnekomandne linijelinije..*/*/

public static void public static void main(Stringmain(String[] [] argsargs) {) {System.out.println("HelloSystem.out.println("Hello World!");World!");

}}}}

Ispis na ekran (.out), ili na izlaz za pogreške (.err)

Postoji i printf funkcija!

Page 28: Java tečaj

Komentiranje kodaKomentiranje koda/**/*** * MetodaMetoda raraččuna yuna y--tu potenciju od broja x.tu potenciju od broja x.* @* @paramparam xx argument xargument x* @* @paramparam yy argument y; mora biti argument y; mora biti nenegativannenegativan* * @@returnreturn vravraćća iznos izraza a iznos izraza x^yx^y*/*/public static public static doubledouble powpow((intint x, x, intint yy) {) {

……}}

}}

Page 29: Java tečaj

Tipovi varijabliTipovi varijabliPrimitivniPrimitivni Objektni omotaObjektni omotačči i

((wrapperswrappers))ZauzeZauzeććee

bytebyte ByteByte 1 oktet / ?, 1 oktet / ?, signedsigned

2 okteta / ?, 2 okteta / ?, signedsigned

4 okteta / ?4 okteta / ?, , signedsigned8 okteta / ?8 okteta / ?, , signedsigned2 okteta / ?, UTF2 okteta / ?, UTF--1616

??

1 bit / ?1 bit / ?

4 okteta / ?4 okteta / ?

8 okteta / ?8 okteta / ?

shortshort ShortShortintint IntegerIntegerlonglong LongLongcharchar CharacterCharacter-- StringStringbooleanboolean BooleanBooleanfloatfloat FloatFloatdoubledouble DoubleDouble

Page 30: Java tečaj

PravilaPravila

booleanboolean: : truetrue, , falsefalse (razli(različčito od 0, 1)ito od 0, 1)ifif((boolean_izrazboolean_izraz) {) {……}}PogrePogreššno:no:intint v = 7;v = 7;ifif(v) {(v) {……}}

PogrePogreššno:no:intint x = 7;x = 7;whilewhile(x) { x(x) { x----; }; }

Page 31: Java tečaj

PravilaPravila

Nikada:Nikada:

doubledouble x = x = nestoIzracunajnestoIzracunaj((……););ifif(x==0.7) {(x==0.7) {……}}

Ne koristiti == za usporedbe Ne koristiti == za usporedbe decimalnih tipova!decimalnih tipova!

ifif((Math.absMath.abs(x(x--0.7)<1E0.7)<1E--6) {6) {……}}

Page 32: Java tečaj

Primitivni tipovi Primitivni tipovi texttext

Koristiti Koristiti statistatiččkeke funkcije funkcije wrapperawrappera::

StringString sBrojsBroj = "375.83";= "375.83";doubledouble dBrojdBroj ==

Double.parseDoubleDouble.parseDouble((sBrojsBroj););StringString sBroj2 =sBroj2 =

Double.toStringDouble.toString((dBrojdBroj););

Pogledati Pogledati javadocjavadoc za dokumentacijuza dokumentaciju

Page 33: Java tečaj

Nekoliko jednostavnih primjeraNekoliko jednostavnih primjera

Napisati program koji Napisati program koji ćće na zaslon e na zaslon ispisati argumente koje dobiva ispisati argumente koje dobiva prilikom pokretanja programaprilikom pokretanja programa

Page 34: Java tečaj

package hr.fer.zemris.java.tecaj_1;package hr.fer.zemris.java.tecaj_1;

/**/*** @author Marko Cupic* @author Marko Cupic* @version 1.0* @version 1.0*/*/public class public class IspisArgumenataIspisArgumenata {{

/**/*** * MetodaMetoda kojakoja se se pozivapoziva prilikomprilikom pokretanjapokretanja* * programaprograma. . ArgumentiArgumenti susu objasnjeniobjasnjeni u u nastavkunastavku..* @* @paramparam argsargs ArgumentiArgumenti iziz komandnekomandne linijelinije..*/*/public static void public static void main(Stringmain(String[] [] argsargs) {) {

intint brojArgumenatabrojArgumenata = = args.lengthargs.length;;

for(intfor(int i = 0; i < i = 0; i < brojArgumenatabrojArgumenata; i++) {; i++) {System.out.printlnSystem.out.println((

"Argument " + (i+1) + ": " + "Argument " + (i+1) + ": " + args[iargs[i]]););

}}}}

}}

Svako polje ima svojstvo

".length"

Page 35: Java tečaj

Nekoliko jednostavnih primjeraNekoliko jednostavnih primjera

Napisati program koji Napisati program koji ćće prilikom e prilikom pokretanja primiti jedan argument pokretanja primiti jedan argument (x), te izra(x), te izraččunati koliko iznosi unati koliko iznosi e^xe^xrazvojem u razvojem u TaylorovTaylorov redredRazvoj rijeRazvoj riješšiti u zasebnoj funkcijiiti u zasebnoj funkcijiProgram na zaslon mora ispisati Program na zaslon mora ispisati rezultatrezultat

Page 36: Java tečaj

package hr.fer.zemris.java.tecaj_1;package hr.fer.zemris.java.tecaj_1;

/**/*** @author Marko Cupic* @author Marko Cupic* @version 1.0* @version 1.0*/*/

public class public class SumaRedaSumaReda {{

public static void public static void main(Stringmain(String[] [] argsargs) {) {……}}

privateprivate staticstatic double double racunajSumuracunajSumu(double (double brojbroj) {) {……}}

}}

Page 37: Java tečaj

/**/*** * MetodaMetoda kojakoja se se pozivapoziva prilikomprilikom pokretanjapokretanja* * programaprograma. . ArgumentiArgumenti susu objasnjeniobjasnjeni u u nastavkunastavku..* @* @paramparam argsargs ArgumentiArgumenti iziz komandnekomandne linijelinije..*/*/public static void public static void main(Stringmain(String[] [] argsargs) {) {

if(args.lengthif(args.length != 1) {!= 1) {System.err.printlnSystem.err.println((

"Program "Program moramora imatiimati jedanjedan argument!"argument!"););System.exit(1);System.exit(1);

}}

double double brojbroj = Double.parseDouble(args[0]);= Double.parseDouble(args[0]);

System.out.println("RacunamSystem.out.println("Racunam sumusumu...");...");

double double sumasuma = = racunajSumu(brojracunajSumu(broj););

System.out.println("fSystem.out.println("f(" + (" + brojbroj + ")=" + + ")=" + sumasuma + ",");+ ",");}}

Svako polje ima svojstvo

".length"

Page 38: Java tečaj

/**/*** * RacunaRacuna e^xe^x razvojemrazvojem u u TaylorovTaylorov red, red, premaprema formuliformuli::* * e^xe^x=1+x+(x^2/(2!))+(x^3/(3!))+(x^4/(4!))+...=1+x+(x^2/(2!))+(x^3/(3!))+(x^4/(4!))+...* @* @paramparam brojbroj argument argument funkcijefunkcije e^xe^x* @return * @return iznosiznos funkcijefunkcije u u tockitocki x=x=brojbroj dobivendobiven kaokao* * sumasuma prvihprvih 10 10 clanovaclanova TaylorovogTaylorovog redareda..*/*/private static double private static double racunajSumu(doubleracunajSumu(double brojbroj) {) {

double double sumasuma = 0.0;= 0.0;double double potencijapotencija = 1.0;= 1.0;double double faktorijelafaktorijela = 1.0;= 1.0;

sumasuma += 1.0;+= 1.0;

for(intfor(int i = 1; i < 10; i++) {i = 1; i < 10; i++) {potencijapotencija = = potencijapotencija * * brojbroj;;faktorijelafaktorijela = = faktorijelafaktorijela * i;* i;sumasuma += += potencija/faktorijelapotencija/faktorijela;;

}}

return return sumasuma;;}}

Page 39: Java tečaj

Nekoliko jednostavnih primjeraNekoliko jednostavnih primjera

Napisati program koji sadrNapisati program koji sadržži funkciju i funkciju koja prima polje koja prima polje doubledouble--ova, koje ova, koje ispisuje na zaslon po zadanom ispisuje na zaslon po zadanom formatuformatuNapisati glavni program koji Napisati glavni program koji ćće e brojeve ispisatibrojeve ispisati–– Najmanje tri mjesta za Najmanje tri mjesta za cijelobrojnicijelobrojni dio, dio,

dva mjesta za decimalnidva mjesta za decimalni–– Dva + dva mjesta s obaveznim ispisom Dva + dva mjesta s obaveznim ispisom

predznakapredznaka

Page 40: Java tečaj

package hr.fer.zemris.java.tecaj_1;package hr.fer.zemris.java.tecaj_1;

import import java.text.DecimalFormatjava.text.DecimalFormat;;

/**/*** @author Marko Cupic* @author Marko Cupic* @version 1.0* @version 1.0*/*/

public class public class FormatiraniIspisDecBrojevaFormatiraniIspisDecBrojeva {{

public static void public static void ispis(doubleispis(double[] [] poljepolje, String format) {, String format) {……

}}

public static void public static void main(Stringmain(String[] [] argsargs) {) {……

}}}}

Page 41: Java tečaj

/**/*** * MetodaMetoda nana standardnistandardni izlazizlaz ispisujeispisuje poljepolje decimalnihdecimalnih* * brojevabrojeva premaprema zadanomzadanom formatuformatu..* @* @paramparam poljepolje poljepolje decimalnihdecimalnih brojevabrojeva kojekoje trebatreba ispisatiispisati..* @* @paramparam format format formatformat kojikoji govorigovori kakokako poljepolje trebatreba ispisatiispisati..* @see * @see DecimalFormatDecimalFormat*/*/public static void public static void ispis(doubleispis(double[] [] poljepolje, String format) {, String format) {

DecimalFormatDecimalFormat formatter = new formatter = new DecimalFormatDecimalFormat((formatformat

););for(intfor(int i = 0; i < i = 0; i < polje.lengthpolje.length; i++) {; i++) {

System.out.printlnSystem.out.println(("("(““ ++ i i ++ "): ["): [““ ++formatter.format(polje[iformatter.format(polje[i])]) ++"]"]““

););}}

}}

Page 42: Java tečaj

/**/*** * MetodaMetoda kojakoja se se pozivapoziva prilikomprilikom pokretanjapokretanja* * programaprograma. . ArgumentiArgumenti susu objasnjeniobjasnjeni u u nastavkunastavku..* @* @paramparam argsargs ArgumentiArgumenti iziz komandnekomandne linijelinije..*/*/

public static void public static void main(Stringmain(String[] [] argsargs) {) {double[] double[] brojevibrojevi = new double[] {= new double[] {

3.712, 55.813, 55.816, 3.712, 55.813, 55.816, --4.184.18};};ispis(brojeviispis(brojevi, "000.00");, "000.00");ispis(brojeviispis(brojevi, "+00.00;, "+00.00;--00.00");00.00");

}}

Page 43: Java tečaj

Nekoliko jednostavnih primjeraNekoliko jednostavnih primjera

Napisati program koji Napisati program koji ćće s tipkovnice e s tipkovnice ččitati decimalni broj po broj i raitati decimalni broj po broj i raččunati unati njihovu sumu, sve dok se upisuju njihovu sumu, sve dok se upisuju nenegativninenegativni brojevibrojevi

Page 44: Java tečaj

package hr.fer.zemris.java.tecaj_1;package hr.fer.zemris.java.tecaj_1;

import import java.io.BufferedReaderjava.io.BufferedReader;;import import java.io.IOExceptionjava.io.IOException;;import import java.io.InputStreamReaderjava.io.InputStreamReader;;

/**/*** @author * @author marcupicmarcupic* @version 1.0* @version 1.0*/*/

public class public class CitanjeSTipkovniceCitanjeSTipkovnice {{

public static void public static void main(Stringmain(String[] [] argsargs) throws ) throws IOExceptionIOException {{

....}}

}}

Page 45: Java tečaj

public static void public static void main(Stringmain(String[] [] argsargs) throws ) throws IOExceptionIOException {{System.out.println("ProgramSystem.out.println("Program zaza raraččunanjeunanje sumesume pozitivnihpozitivnih brojevabrojeva.");.");System.out.println("UnositeSystem.out.println("Unosite brojevebrojeve, , jedanjedan popo retkuretku.");.");System.out.printlnSystem.out.println((

""KadaKada uneseteunesete negativannegativan brojbroj, , ispisatispisat cece se se sumasuma.");.");

BufferedReaderBufferedReader reader = new reader = new BufferedReaderBufferedReader((new new InputStreamReader(System.inInputStreamReader(System.in))

););

double double sumasuma = 0.0;= 0.0;while(truewhile(true) {) {

String String redakredak = = reader.readLinereader.readLine();();if(redakif(redak==null) break;==null) break;double double brojbroj = = Double.parseDouble(redakDouble.parseDouble(redak););if(brojif(broj<0) break;<0) break;sumasuma += += brojbroj;;

}}

System.out.print("SumaSystem.out.print("Suma je: ");je: ");System.out.println(sumaSystem.out.println(suma););

reader.closereader.close();();}}

Page 46: Java tečaj

Za napredniju obradu ulaza postoji Za napredniju obradu ulaza postoji razred razred java.util.Scannerjava.util.Scanner

Scanner sc = new Scanner(System.in);int i = sc.nextInt();

Scanner sc = new Scanner(new File("myNumbers"));while (sc.hasNextLong()) {

long aLong = sc.nextLong();}

String input = "1 fish 2 fish red fish blue fish";Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*");System.out.println(s.nextInt());System.out.println(s.nextInt());System.out.println(s.next());System.out.println(s.next());s.close();

Page 47: Java tečaj

Za naprednije generiranje izlaza Za naprednije generiranje izlaza postoji podrpostoji podršška formatiranjuka formatiranju

Za detalje oko Za detalje oko formatnogformatnog stringastringapogledati dokumentaciju:pogledati dokumentaciju:http://docs.oracle.com/javase/7/docs/api/java/uthttp://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html#syntaxil/Formatter.html#syntax

System.out.printf("%s\n", "bla");System.out.format("%s\n", "bla");

String novi = String.format("%4$s %3$s %2$s %1$s %4$s %3$s %2$s %1$s",

"a", "b", "c", "d");"d c b a d c b a"

Page 48: Java tečaj

Rad sa Rad sa stringovimastringovima

U Javi U Javi StringString nije polje znakova nije polje znakova terminirano s terminirano s ‘‘\\00’’Kako se toKako se toččno no StringString pohranjuje pohranjuje ––nije nas briganije nas brigaZahvaljujuZahvaljujućći tome, Java omogui tome, Java omoguććava ava laklakšše baratanje e baratanje StringovimaStringovimaVaVažžno: no: stringovistringovi su su nepromijenjivinepromijenjivi((immutableimmutable); metode koje ne); metode koje neššto to mijenjaju vramijenjaju vraććaju nove aju nove stringovestringove!!

Page 49: Java tečaj

package hr.fer.zemris.java.tecaj_1;package hr.fer.zemris.java.tecaj_1;

/**/*** @author Marko Cupic* @author Marko Cupic* @version 1.0* @version 1.0*/*/

public class public class RadSaStringovimaRadSaStringovima {{

/**/*** * MetodaMetoda kojakoja se se pozivapoziva prilikomprilikom pokretanjapokretanja* * programaprograma. . ArgumentiArgumenti susu objasnjeniobjasnjeni u u nastavkunastavku..* @* @paramparam argsargs ArgumentiArgumenti iziz komandnekomandne linijelinije..*/*/

public static void public static void main(Stringmain(String[] [] argsargs) {) {ispis1();ispis1();ispis2();ispis2();ispis3();ispis3();ispis4();ispis4();

}}

}}

Page 50: Java tečaj

/**/*** * DemonstracijaDemonstracija zbrajanjazbrajanja stringovastringova.<.<brbr>>* * ZbrajanjeZbrajanje uporabomuporabom operatoraoperatora + + krozkroz vise vise naredbinaredbi..* * VrloVrlo neefikasnoneefikasno!!*/*/

private static void ispis1() {private static void ispis1() {String String teksttekst = null;= null;

teksttekst = "The quick " + "brown ";= "The quick " + "brown ";teksttekst += "fox jumps over ";+= "fox jumps over ";teksttekst += 3;+= 3;teksttekst += " lazy dogs.";+= " lazy dogs.";

System.out.println(tekstSystem.out.println(tekst););}}

Page 51: Java tečaj

/**/*** * DemonstracijaDemonstracija zbrajanjazbrajanja stringovastringova.<.<brbr>>* * ZbrajanjeZbrajanje operatoromoperatorom + u + u jednojjednoj naredbinaredbi. . EfikasnijeEfikasnije. . */*/private static void ispis2() {private static void ispis2() {

String String teksttekst = null;= null;

intint brojbroj = 3;= 3;

teksttekst = "The quick brown fox jumps over = "The quick brown fox jumps over ““ ++brojbroj ++ " lazy dogs.";" lazy dogs.";

System.out.println(tekstSystem.out.println(tekst););}}

Page 52: Java tečaj

/**/*** * DemonstracijaDemonstracija zbrajanjazbrajanja stringovastringova.<.<brbr>>* * ZbrajanjeZbrajanje uporabomuporabom StringBufferStringBuffer objektaobjekta. . JednakoJednako efikasnoefikasno* * kaokao i i primjerprimjer 22?? IInicijalnonicijalno se se stvarastvara spremnikspremnik* * velicinevelicine 16 16 kojikoji se tri se tri putaputa realocirarealocira kakokako bi se bi se prosirioprosirio..* * NapomenaNapomena: : prijeprije Java 5.0 Java 5.0 koristikoristio seo se StringBuStringBufffferer kojikoji je je bitnobitno* * sporijisporiji ((aliali je je viviššedretvenoedretveno siguransiguran).).*/*/private static void ispis3() {private static void ispis3() {

String String teksttekst = null;= null;

StringBuStringBuilderilder sbsb = new = new StringBuStringBuilderilder();();

sb.append("Thesb.append("The quick ").quick ").append("brownappend("brown ");");sb.append("foxsb.append("fox jumps over ").append(3);jumps over ").append(3);sb.appendsb.append(" lazy dogs.");(" lazy dogs.");

teksttekst = = sb.toStringsb.toString();();

System.out.println(tekstSystem.out.println(tekst););}}

Page 53: Java tečaj

/**/*** * DemonstracijaDemonstracija zbrajanjazbrajanja stringovastringova.<.<brbr>>* * ZbrajanjeZbrajanje uporabomuporabom StringBufferStringBuffer objektaobjekta. . NajefikasnijeNajefikasnije* * akoako unaprijedunaprijed znamoznamo potrebnupotrebnu velicinuvelicinu spremnikaspremnika. U . U primjeruprimjeru* se * se alociraalocira spremnikspremnik velicinevelicine 50 50 znakovaznakova. . * * NapomenaNapomena: : prije prije Java 5.0 Java 5.0 koristikoristio seo se StringBuStringBufffferer kojikoji je je bitnobitno* * sporijisporiji ((aliali je je viviššedretvenoedretveno siguransiguran).).*/*/private static void ispis4() {private static void ispis4() {

String String teksttekst = null;= null;StringBuStringBuilderilder sbsb = new = new StringBuStringBuilderilder(50);(50);

sb.append("Thesb.append("The quick ").quick ").append("brownappend("brown ");");sb.append("foxsb.append("fox jumps over ").append(3);jumps over ").append(3);sb.appendsb.append(" lazy dogs.");(" lazy dogs.");

teksttekst = = sb.toStringsb.toString();();

System.out.println(tekstSystem.out.println(tekst););}}

Page 54: Java tečaj

Uporaba "struktura" podatakaUporaba "struktura" podataka

U ovom primjeru tretirat U ovom primjeru tretirat ććemo Javu emo Javu kao Ckao C--olikioliki jezik; bajezik; bašš kao kao ššto C ima to C ima structstruct za strukture, u Javi moza strukture, u Javi možžemo emo koristiti koristiti classclass za simulaciju takvog za simulaciju takvog ponaponaššanjaanja

Page 55: Java tečaj

Uporaba "struktura" podatakaUporaba "struktura" podataka

Tada umjesto CTada umjesto C--ovskogovskog alociranja:alociranja:

structstruct x *var = (x *var = (structstruct x*)x*)mallocmalloc((sizeofsizeof((structstruct x)x)

););

u Javi piu Javi piššemo:emo:

x var = x var = newnew x();x();

Page 56: Java tečaj

Uporaba "struktura" podatakaUporaba "struktura" podataka

Razmotrit Razmotrit ććemo jednostavan primjer emo jednostavan primjer izgradnje jednostavnog stogaizgradnje jednostavnog stogaTreba podrTreba podržžati moguati moguććnost dodavanja nost dodavanja na stog, ispitivanja je li stog prazan na stog, ispitivanja je li stog prazan te mogute moguććnost skidanja elementa sa nost skidanja elementa sa stogastogaPrikazano rjePrikazano rješšenje nije u duhu OOPenje nije u duhu OOP--a; Javu ovdje koristimo kao da je Ca; Javu ovdje koristimo kao da je C

Page 57: Java tečaj

package hr.fer.zemris.java.tecaj_1;package hr.fer.zemris.java.tecaj_1;public class public class DemoStogaDemoStoga {{

static class static class ZapisZapis {{ZapisZapis staristari;;String String vrijednostvrijednost;;

}}

public static void public static void main(Stringmain(String[] [] argsargs) {) {ZapisZapis stogstog = null;= null;

stogstog = = dodaj(stogdodaj(stog, "Ana");, "Ana");stogstog = = dodaj(stogdodaj(stog, ", "IvanaIvana");");stogstog = = dodaj(stogdodaj(stog, ", "JasnaJasna");");

while(nijePrazan(stogwhile(nijePrazan(stog)) {)) {ZapisZapis vrhvrh = = stogstog;;stogstog = = ukloni(stogukloni(stog););System.out.println("UklonioSystem.out.println("Uklonio samsam imeime: "+: "+vrh.vrijednostvrh.vrijednost););

}}}}

// jo// jošš implementacije metoda: sljedeimplementacije metoda: sljedećći i slideslide……..}}

Page 58: Java tečaj

public class public class DemoStogaDemoStoga {{

// nastavak s prethodnog // nastavak s prethodnog slideaslidea::

static static ZapisZapis dodaj(Zapisdodaj(Zapis stogstog, String , String imeime) {) {ZapisZapis glavaglava = new = new ZapisZapis();();glava.vrijednostglava.vrijednost = = imeime;;glava.stariglava.stari = = stogstog;;return return glavaglava;;

}}

static static booleanboolean nijePrazan(ZapisnijePrazan(Zapis stogstog) {) {return return stogstog != null;!= null;

}}

static static ZapisZapis ukloni(Zapisukloni(Zapis stogstog) {) {return return stog.staristog.stari;;

}}}}