Java tečaj

Preview:

Citation preview

Java teJava teččajaj1. dio1. dioUvodUvod

Java-projekt @ ZEMRIS

© 2014.

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

NajvaNajvažžnije adresenije adrese

NajvaNajvažžnije adresenije adrese

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

NajvaNajvažžnije adresenije adrese

NajvaNajvažžnije adresenije adrese

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

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

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

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

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)

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.

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..

““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

““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

““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

““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

““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!

““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

““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

““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)

““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

““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

““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

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

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

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!

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) {) {

……}}

}}

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

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----; }; }

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) {……}}

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

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

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"

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

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) {) {……}}

}}

/**/*** * 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"

/**/*** * 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;;}}

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

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) {) {……

}}}}

/**/*** * 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])]) ++"]"]““

););}}

}}

/**/*** * 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");

}}

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

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 {{

....}}

}}

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();();}}

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();

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"

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!!

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();

}}

}}

/**/*** * 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););}}

/**/*** * 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););}}

/**/*** * 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););}}

/**/*** * 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););}}

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

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();

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

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……..}}

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;;

}}}}