Predavanje br. index|1|2|3|4|5|6|7|8|9|10|11|12|13|14|HOME
Primitivni tipovi podataka – operatori – razmak – literali – identifikatori – kljuène rijeèi – separatori – zbrajanje cijelih brojeva – zbrajanje brojeva tipa double – množenje i dijeljenje – neoèekivani kvocijenti – raèunanje ostatka, modulo – prioritet izvršavanja operatora – zagrade – miješanje tipova podataka – automatsko dodjeljivanje tipova podataka (casting) – pretvaranje stringova u brojeve – podaci tipa char – Unicode – naredbe za kontrolu toka – naredba if – ispitivanje jednakosti – klauzula else – klauzula else if – while petlja – for petlja – do while petlja – booleovski podaci – relacijski operatori – prioritet izvršavanja relacijskih operatora – ispitivanje jednakosti objekata – naredba break – naredba continue – labelirane petlje – naredba switch-case – kondicionalni operator (? :) – logièki operatori – prioritet izvršavanja logièkih operatora – deklariranje polja – kreiranje polja – inicijaliziranje polja – metoda System.arraycopy() – deklariranje, alociranje i inicijaliziranje dvodimenzionalnih polja – višedimenzionalna i neuravnotežena polja
Primitivni tipovi podataka u Javi vrlo su slièni onima u C i C++. To su boolean, byte, short, int, long, float, double i char. Tip boolean je dodan u Javi. Implementacija je meðutim bitno proèišæena na nekoliko naèina.
int),
Java specificira sve.boolean
1-bit. Može poprimiti vrijednosti
true
ili false.
true i false su definirane konstante jezika i
nisu isto što i True
i False,
TRUE
i FALSE,
nula i ne-nula, 1 i 0 ili bilo koja druga numerièka vrijednost. Ne može se
pretvoriti ni u jedan drugi tip varijable niti se drugi tipovi mogu pretvoriti
u boolean.
byte
1 oznaèeni byte (komplenent od 2). Pokriva vrijednosti od -128 do 127.
short
2 bytea, oznaèena (komplement od 2), -32,768 to 32,767
int
4 bytea, oznaèena (komplement od 2), od -2,147,483,648 do 2,147,483,647. Kao kod svih numerièkih tipova, moguæe je pretvaranje (casting) u ostale numerièke tipove (byte, short, long, float, double). Kod pretvaranja s gubitkom informacija (lossy casts), npr int u byte, konverzija se obavlja modulo duljina “kraæeg” tipa.
long
8 bytea oznaèenih (komplement od 2), od -9,223,372,036,854,775,808 do +9,223,372,036,854,775,807.
float
4 bytea, IEEE 754, od 1.40129846432481707e-45 do 3.40282346638528860e+38 (positivni ili negativni).
Kao kod svih numerièkih tipova, moguæe je
pretvaranje (casting) u ostale numerièke tipove (byte, short, long, int, double). Kod
pretvaranja s gubitkom informacija (lossy casts), npr float
u short,
decimalni dio se odbacuje, i konverzija se obavlja modulo duljina “kraæeg”
tipa.
double
8 bytea IEEE 754, od 4.94065645841246544e-324d do 1.79769313486231570e+308d (positivni or negativni).
char
2 bytea, neoznaèena, Unicode, od 0 do 65,535
Vrijednosti tipa char nisu isto što i vrijednosti tipa byte, int, short ili Strings.
|
Operator |
Akcija |
|
|
Zbrajanje brojeva, konkatenacija stringova |
|
|
Zbrajanje i pridruživanje brojeva, konkatenacija i pridruživanje stringova |
|
|
Oduzimanje |
|
|
Oduzimanje i pridruživanje |
|
|
Množenje |
|
|
Množenje i pridruživanje |
|
|
Dijeljenje |
|
|
Dijeljenje i pridruživanje |
|
|
Bitovski OR |
|
|
Bitovski OR i pridruživanje |
|
|
Bitovski XOR |
|
|
Bitovski XOR i pridruživanje |
|
|
Bitovski AND |
|
|
Bitovski AND i pridruživanje |
|
|
Modulo (raèunanje ostatka) |
|
|
Modulo i pridruživanje |
|
|
Veæe |
|
|
Veæe ili jednako |
|
|
manje |
|
|
Manje ili jednako |
|
|
booleovski NOT |
|
|
razlièito |
|
|
Poveæavanje za jedan |
|
|
Smanjivanje za jedan |
|
|
Shift – pomak bitova u desno, zajedno sa znakom |
|
|
Shift – pomak bitova u desno, zajedno sa znakom i pridruživanje |
|
|
Shift – pomak bitova u lijevo |
|
|
Shift – pomak bitova u lijevo i pridruživanje |
|
|
Neoznaèeni bitovski shift u desno |
|
|
Neoznaèeni bitovski shift u desno i pridruživanje |
|
|
Booleovski AND |
|
|
Booleovski OR |
|
|
Booleovska jednakost |
|
|
Pridruživanje |
|
|
Bitovski NOT |
|
|
Uvjet |
|
|
Provjera tipa |
Razmak je u pravilu znak [space], koji dobijete kad pritisnete <spacebar> no u Javi postoje još 4 znaka za razmak: [horizontal tab], [form feed], [carriage return] i [linefeed]. Ovisno o platformi, kad pritisnete tipku <return> ili <enter>, dobit æete [carriage return] (MAC), [linefeed] (UNIX) ili oboje (DOS, Windows, VMS). To æe proizvesti tvrdi prijelom linije u tekstu izvornog programa.
Osim u literalima tipa String,
jedan razmak je ekvivalentan nizu uzastopnih razmaka bilo koje vrste.
Unutar literala tipa String
i char
jedini dozvoljeni razmak je znak [space].
Umjesto znakova [horizontal tab], [form feed], [carriage
return] i [linefeed] moraju se
stavljati odgovarajuæe escape-sekvence, npr. \t, \r, \f i \n. Ne
možete razlomiti string ovako:
String poem = "Mary had a little lambwhose fleece was white as snowand everywhere that Mary wentthe lamb was sure to go.";Umjesto
toga trebate koristiti znakove \n i operator konkatenacije +, ovako:
String poem = "Mary had a little lamb\n" +
"whose fleece was white as snow\n" +
"and everywhere that Mary went\n" +
"the lamb was sure to go.";Primijetite
da naredbe možete razlomiti kroz nekoliko redaka, jedino ne možete to uèiniti
sa literalima tipa String.
Takoðer primijetite da \n funkcionira samo na UNIX-u. Ako želite svoj
kod uèiniti neovisnim o platformi, umjesto \n upotrijebit æete metodu System.getProperty("line.separator")
koja æe vratiti odgovarajuæi znak za danu platformu. Pogledajte takoðer i
metodu System.getProperties().
Java nema sve escape-sekvence koje ima C. Osim veæ spomenutih, to su još samo \b za [backspace] i \\ za sam [backslash]. No mogu se koristiti i \u sekvence koje dozvoljavaju umetanje bilo kojeg Unicode znaka.
Literali
tipa String
oznaèavaju se dvostrukim navodnicima, npr “Hello
World!”. Takoðer, “dva” + “dva”
je isto što i “dvadva”. Navodnici,
meðutim nisu dio literala. Vrijednost literala “Hello World!” je Hello World!, a ne “Hello World!”. Takoðer
formatiranje znakova nema utjecaja na vrijednost stringa, dakle “Hello World!” je isto što i “Hello World!”.
Literali
tipa char
oznaèavaju se jednostrukim navodnicima i smiju sadržavati toèno jedno slovo,
npr. ¸’c’ je literal tipa char èija
vrijednost je slovo c.
Booleovski
literali su true i false,
a znaèe istinu i laž.
Brojevi
mogu takoðer biti literali. Npr. 34 je
literal tipa int
i njegova je vrijednost broj 34, dok je 1.5 literal tipa double , a to
su i 45.6, 76.4E8 (76.4 puta 10 na osmu) i
-32.0.
Nadalje, 34L je literal tipa long i oznaèava broj 34, dok su
1.5F,
45.6f
i 76.4E8F literali tipa float.
Identifikatori
su imena variabli, metoda, klasa, paketa i suèelja. Za razliku od literala to
nisu same stvari nego naèin njihovog referenciranja. U programu HelloWorld
identifikatori su HelloWorld, String, args,
main
i System.out.println.
Identifikatori moraju biti sastavljeni od slova, brojeva i znakova _ (underscore) i “$ (dollar sign). Poèetno slovo identifikatora smije biti samo slovo, _ ili $. Mala i velika slova se razlikuju. Ime ne može sadržavati razmak.
Ovo su primjeri legalnih varijabli u Javi:
MyVariablemyvariableMYVARIABLExi_myvariable$myvariable_9pinsandrosανδροςOReillyThis_is_a_very_long_variable_nameSljedeæih nekoliko primjera nisu valjana imena varijabli:
My Variable // sadrzi
razmak9pins // pocinje brojema+c // + nije
alfanumericki znaktesting1-2-3 // - nije
alfanumericki znakO'Reilly // ' nije
alfanumericki znakOReilly_&_Associates
// & nije alfanumericki znakPostoji 50 rezerviranih kljuènih rijeèi koje u Javi 1.1 (51 u Javi 1.2). U tablici je navedeno njih 48 koje se stvarno koriste.
|
Keyword |
Purpose |
|
|
Deklarira apstraktnu klasu ili metodu |
|
|
Deklarira booleovsku varijablu ili povratni tip (return type) |
|
|
Prijevremeni izlazak iz petlje |
|
|
Deklarira byte varijablu ili povratni tip |
|
|
Jedna od grana u naredbi switch |
|
|
Obrada iznimke |
|
|
deklarira char variablu ili povratni tip |
|
|
Oznaèava poèetak definiranja klase |
|
|
Prijevremeni povratak na poèetak petlje |
|
|
default akcija za switch naredbu |
|
|
Poèetak do while petlje |
|
|
deklarira double variablu ili povratni tip |
|
|
Oznaèava dio koda koji se izvršava ako uvjet u if naredbi nije istinit |
|
|
Oznaèava da je promatrana klasa potklasa neke druge klase |
|
|
Deklarira da klasa ne može imati podklasu ili da varijabla ili metoda ne može bit pregažena |
|
|
Deklarira blok koda koji æe garantirano biti izveden |
|
|
deklarira float variablu ili povratni tip |
|
|
Poèetak for petlje |
|
|
Izvršava kod ako je uvjet istinit |
|
|
Deklarira da promatrana klasa implementira dano suèelje |
|
|
Dopušta pristup klasi ili grupi klasa unutar paketa |
|
|
Ispituje da li je objekt instanca neke klase |
|
|
deklarira int (integer) variablu ili povratni tip |
|
|
Oznaèava poèetak definiranja suèelja |
|
|
deklarira long (long integer) variablu ili povratni tip |
|
|
Deklarira da je metoda implementirana u drugom programskom jeziku |
|
|
Alocira novi object |
|
|
Definira paket kojemu pripada datoteka sa promatranim izvornim kodom |
|
|
Deklarira metodu ili member varijablu kao privatnu |
|
|
Deklarira klasu, metodu ili member varijablu kao zaštiæenu |
|
|
Deklarira klasu, metodu ili member varijablu kao javnu |
|
|
Vraæa vrijednost iz metode |
|
|
deklarira short (short integer) variablu ili povratni tip |
|
|
Deklarira da varijabla ili metoda pripada klasi, a ne objektu |
|
|
Referenca na roditelja promatranog objekta |
|
|
Ispituje istinitost nekoliko moguæih uvjeta |
|
|
Oznaèava da je promatrani dio koda osjetljiv na threadove |
|
|
Referenca na sam promatrani objekt |
|
|
Odbacivanje iznimke |
|
|
Deklarira iznimke koje metoda odbacuje |
|
|
Varijabla ne smije biti serijalizirana |
|
|
Pokušava izvršiti operaciju koja može eventualno odbaciti iznimku |
|
|
Deklarira da metoda ne vraæa nikakvu vrijednost |
|
|
Upozorava kompajler da se varijabla mijenja asinhrono |
|
|
Poèetak while petlje |
Još
dvije, const
i goto,
rezervirane su, ali nisu implementirane. To omoguæuje kompajleru bolje
kreiranje poruka o pogreškama u sluèaju krive upotrebe ovih uobièajenih
kljuènih rijeèi jezika C++ u Java programima.
Java
1.2 dodaje kljuènu rijeè strictfp
kojom se deklarira da metoda ili klasa mora biti izvršena sa egzaktnom IEEE 754
semantikom.
Primijetite
da true
and false
nisu kljuène rijeèi nego booleovski literali. Svejedno, ni njih ne možete
koristiti kao imena varijabli.
Separatori
pomažu u definiranju structure programa. U programu HelloWorld koriste se
zagrade, ( ),
vitièaste zagrade, {
}, toèka, .,
toèka-zarez, ;.
|
Separator |
Svrha |
|
( ) |
Zatvara argumente u definicijama i pozivima metoda; podešava prioritete izvršavanja u aritmetièkim izrazima; okružuje umjetno pretvorene tipove podataka (cast types); izdvaja uvjetne izraze u naredbama za kontrolu toka |
|
{ } |
Definira blokove koda; automatski inicijalizira polja |
|
[ ] |
Deklarira polje tipova; izdvaja vrijednosti elemenata polja |
|
; |
Završava naredbu |
|
, |
Razdvaja nanizane identifikatore u deklaracijama varijabli; ulanèava naredbe u uvjetnom dijelu for petlje |
|
. |
Selektira varijablu ili metodu nekog objekta; separira imena paketa od imena podpakete i imena klasa |
|
: |
Koristi se nakon labela u petljama |
class AddInts { public static void main (String args[]) { int i = 1; int j = 2; int k; System.out.println("i je " + i); System.out.println("j je " + j); k = i + j; System.out.println("i + j je " + k); k = i - j; System.out.println("i - j je " + k); } } Evo
što se dogaða kad izvršite AddInts:
% javac AddInts.java% java AddIntsi je 1j je 2i + j je 3i - j je -1%
doubleBrojevi
tipa double
sadrže decimalnu toèku .
class AddDoubles { public static void main (String args[]) { double x = 7.5; double y = 5.4; double z; System.out.println("x je " + x); System.out.println("y je " + y); z = x + y; System.out.println("x + y je " + z); z = x - y; System.out.println("x - y je " + z); } }
Evo rezultata:
% javac AddDoubles.java% java AddDoublesx je 7.5y je 5.4x + y je 12.9x - y je 2.0999999999999996
Operatori množenja i dijeljenja su * (množenje) i / (dijeljenje).
class MultiplyDivide { public static void main (String args[]) { int i = 10; int j = 2; int k; System.out.println("i je " + i); System.out.println("j je " + j); k = i/j; System.out.println("i/j je " + k); k = i * j; System.out.println("i * j je " + k); } }
Rezultat:
% javac MultiplyDivide.java% java MultiplyDividei je 10j je 2i/j je 5i * j je 20%Realni brojevi tipa float i double množe se i dijele na isti naèin. U sluèaju cjelobrojnog dijeljenja, rezultat se zaokružuje prema dolje. Npr. cjelobrojno dijeljenje 10 sa 3 daje 3.
2/3 = 0
3/2
= 1
1/0
= ArithmeticException
0/0
= ArithmeticException
1.0/0.0
= Inf
1.0/0
= Inf
0.0/0.0
= NaN (not a number)
-1.0/0.0
= -Inf
Inf
+ 1 = Inf
Inf
+ Inf = Inf
Inf
- Inf = NaN
Inf/Inf
= NaN
NaN
+ anything = NaN
NaN
- anything = NaN
NaN
* anything = NaN
NaN
- anything = NaN
NaN
< NaN je false
NaN
> NaN je false
NaN
<= NaN je false
NaN
>= NaN je false
NaN
== NaN je false
NaN
!= NaN je true
Operator
za raèunanje ostatka dijeljenja dvaju brojeva (modulo) je %.
class Remainder { public static void main (String args[]) { int i = 10; int j = 3; int k; System.out.println("i je " + i); System.out.println("j je " + j); k = i%j; System.out.println("i%j je " + k); } }
Izlaz:
% javac Remainder.java% java Remainderi je 10j je 3i%j je 1%Primijetite da se operacija modulo može u Javi primijeniti i na realne brojeve. Npr. 5.5 % 1.5 je 1.
Više operatora može biti u istom izrazu:
int m = 1
+ 2 + 3 + 4 + 5;
Sljedeæi program raèuna energiju ekvivalentnu masi jednog elektrona uz pomoæ Einsteinove formule E = mc2.
class mc2 { public static void main (String args[]) { double mass = 9.1096E-25; double c = 2.998E8; double E = mass * c * c; System.out.println(E); }}Izlaz:
% javac mc2.java% java mc28.18771e-08%U sluèaju razlièitih operatora, prioritet je uobièajen: Sljedeæe tri naredbe su ekvivalentne
int n = 1 - 2 * 3 - 4 + 5;int n = 1 - (2 * 3) - 4 + 5;int n= -4;Unutar do sada spomenutih operatora, operacije se izvršavaju sljedeæim prioritetom:
Zagrade se koriste za mijenjanje uobièajenog redosljeda operacija. Sljedeæi primjer pokazuje pretvaranje Fahrenheitovih stupnjeva u Celsiusove po formuli C = (5/9) (F - 32) gdje su C stupnjevi Celsiusa a F stupnjevi Fahrenheita. Program ispisuje tablicu konverzija izmeðu 0 i 300 stupnjeva Fahrenheita za svakih 20 stupnjeva.
// Ispisuje tablicu konverzije Fahrenheita u Celsiuse class FahrToCelsius { public static void main (String args[]) { double fahr, celsius; double lower, upper, step; // donja granica temperaturne tablice lower = 0.0; // gornja granica temperaturne tablice upper = 300.0; // velicina koraka step = 20.0; fahr = lower; while (fahr <= upper) { celsius = (5.0 / 9.0) * (fahr-32.0); System.out.println(fahr + " F = " + celsius + " C"); fahr = fahr + step; } } } Obrada i izlaz:
% javac FahrToCelsius.java% java FahrToCelsius0.0 F = -17.77777777777778 C20.0 F = -6.666666666666667 C40.0 F = 4.444444444444445 C60.0 F = 15.555555555555557 C80.0 F = 26.666666666666668 C100.0 F = 37.77777777777778 C120.0 F = 48.88888888888889 C140.0 F = 60.0 C160.0 F = 71.11111111111111 C180.0 F = 82.22222222222223 C200.0 F = 93.33333333333334 C220.0 F = 104.44444444444444 C240.0 F = 115.55555555555556 C260.0 F = 126.66666666666667 C280.0 F = 137.77777777777777 C300.0 F = 148.88888888888889 C%
U ovom programu nema mnogo novog u odnosu na prethodne primjere, no pažnju obratimo na sljedeæu liniju:
celsius = (5.0 / 9.0) * (fahr-32.0);To je prijevod formule C = (5/9)(F - 32) gdje je dodana * za množenje jer Java ne podržava implicitno množenje faktora u zagradama. Zagrade se koriste kao i u obiènoj algebri, za prilagodbu pravila prioriteta. Za operacije koje koriste uobièajene aritmetièke operatore (+, -, *, /), pravila prioriteta su ista kao i u obiènoj algebri.
Razlièiti
tipovi podataka mogu se pojaviti u istoj naredbi. Primjer pokazuje istovremenu
upotrebu int
i double.
class IntAndDouble { public static void main (String args[]) { int i = 10; double x = 2.5; double k; System.out.println("i je " + i); System.out.println("x je " + x); k = i + x; System.out.println("i + x je " + k); k = i * x; System.out.println("i * x je " + k); k = i - x; System.out.println("i - x je " + k); k = x - i; System.out.println("x - i je " + k); k = i / x; System.out.println("i / x je " + k); k = x / i; System.out.println("x / i je " + k); } }Izlaz:
% javac IntAndDouble.java% java IntAndDoublei je 10x je 2.5i + x je 12.5i * x je 25.0i - x je 7.5x - i je -7.5i / x je 4.0x / i je 0.25%
Redoslijed može imati utjecaja na rezultat kad se tipovi podataka miješaju. Na primjer,
1
/ 2 * 3.5 = 0.0
3.5 * 1 / 2 = 1.75
3.5 / 2 = 1.75
Kod miješanja tipova podataka, uobièajeni matematièki zakoni komutacije opæenito ne vrijede, posebno ne kad se miješaju cjelobrojne (integer) i realne (floating point) vrijednosti.
1.0
/ 2 * 3.5 = 1.75
3.5 * 1.0 / 2 = 1.75
1 / 2.0 * 3.5 = 1.75
3.5 * 1.0 / 2.0 = 1.75
Ako
int
podijelimo sa int
dobijemo int.
Ako
double
podijelimo sa double
dobijemo double.
Ako
int
podijelimo sa double
ili double
sa double,
dobijemo double
jer u sluèaju nejednakosti tipova Java teži dodjeljivanju što šireg tipa kako
se sprijeèilo gubljenje informacija.
Pravilo:
·
Ako je bilo koja varijabla u aritmetièkoj binarnoj
operaciji (zbrajanje, oduzimanje množenje, dijeljenje, modulo) tipa double onda
Java tretira obje vrijednosti kao double.
·
Ako ni jedna nije double, ali je jedna float, Java
tretira obje vrijednosti kao float.
·
Ako ni jedna nije ni float ni double, ali je jedna long, Java
tretira obje vrijednosti kao long.
·
Konaèno, ako ni jedna nije double, float ni long, Java
tretira obje vrijednosti kao int, èak ako u jednadžbi uopæe nema cijelih
brojeva.
Dakle,
rezultat æe biti double,
float,
long
ili int,
ovisno o tipovima argumenata.
U
naredbi pridruživanja, dakle ako postoji znak jednakosti, Java usporeðuje tip
na lijevoj strani sa konaènim tipom na desnoj strani. Tip na lijevoj strani
neæe se promijeniti, ali æe se provjeriti da li vrijednost sa desne strane (double, float, int or long) odgovara
tipu na lijevoj strani. Sve se može smjestiti u double. Sve osim double može se
smjestiti u float.
Svaki cjelobrojni tip može se smjestiti u long, ali float
i double
ne mogu, dok se sve tipa int, short i byte
može smjestiti u int. Ako se desna strana može smjestiti u
lijevu, pridruživanje se normalno obavlja.
Pridruživanje
vrijednosti tipa long
varijablama tipa int
ili pak vrijednosti tipa double
varijablama tipa float
može uzrokovati probleme i kompajler vam takva pridruživanja neæe dopustiti
osim ako eksplicitno navedete da želite pretvaranje (casting). Prisilno
pretvaranje tipova oznaèava se navoðenjem odgovarajuæeg tipa u okruglim
zagradama neposredno prije izraza koji treba pretvoriti. Na primjer,
int i = (int) 9.0/4.0;
Kad
se vrijednost pretvara u drugi tip prije pridruživanja, niz operacija se
poduzima da bi se desna strana “skratila” na pravu velièinu. Za konverziju
izmeðu realnih (floating point) i cijelih brojeva (npr. int ili long), razlomljeni
dio se odbacuje (zaokružuje na nulu). To æe proizvesti cijeli broj. Ako je on
dovoljno mali da stane u lijevu stranu, pridruživanje je završeno. U suprotnom,
ako je prevelik, bit æe mu pridružena najveæa, a ako je premali, najmanja
moguæa vrijednost za odgovarajuæi tip.
Valja voditi raèuna o tome da prisilno pretvaranje može uzrokovati pogreške kojima æe biti vrlo teško uæi u trag i zato ovu moguænost treba koristiti s oprezom.
Prilikom
obrade korisnièkog inputa èesto je potrebno neki String pretvoriti u int. To se
radi uz pomoæ statièke metode Integer.valueOf(String
s) u kombinaciji s (nestatièkom) metodom intValue()
koje pripadaju klasi java.lang.Integer.
Npr. String
"22"
pretvorili bismo u int
22 na sljedeæi naèin:
int i = Integer.valueOf("22").intValue();S
tipovima double,
float
i long
postupamo slièno, koristeæi statièke metode Double.valueOf(String
s), Float.valueOf(String
s) i Long.valueOf(String
s) u kombinaciji s odgovarajuæim metodama doubleValue(),
floatValue()
i longValue()
koje pripadaju, respektivno, klasama java.lang.Double,
java.lang.Float
i java.lang.Long.
String
"22" pretvorili bismo u long 22 ovako:
long l = Long.valueOf("22").longValue();
String "22.5"
pretvorili bismo u float
ili double
ovako:
double x = Double.valueOf("22.5").doubleValue();float y = Float.valueOf("22.5").floatValue();Razlièite
valueOf()
metode relativno su inteligentne i mogu prepoznati znakove plus i minus,
eksponente i ostale uobièajene brojèane formate. Meðutim, ako kao argument
dobiju nešto potpuno ne-numerièko, npr. "Hello World",
vjerojatno æe izbaciti NumberFormatException.
Za sad još niste uèili kako baratati s iznimakama pa u svojim programima
izbjegavajte takve situacije.
Preradit æemo sada program E = mc2 tako da o masi u kilogrami