Uvod u programiranje

Maja Čić


Stringovi

Osnovna razlika između primitivnih tipova (vidi lekciju) i String tipa je u tome što su vrijednosti tipa String objekti.

Prisjetimo se da su potprogrami skupovi programskih naredbi s imenom. Svi Java potprogrami su smješteni u klasama ili u objektima. Standardne klase u Javi sadržavaju unaprijed određene potprograme koji se mogu koristiti. Vrijednost tipa String, koja je objekt, ima potprograme koji se mogu koristiti za rad s tim stringom. Svi ti potprogrami se mogu pozivati bez znanja o tome kako oni rade, što je i bit tih potprograma: korištenje bez znanja o tome što se događa unutra.

Klase u Javi imaju dvije različite namjene. Prvo, klasa okuplja varijable i potprograme sadržane u toj klasi. Te varijable i potprogrami zovu se statički članovi klase. Najbolji primjer toga je main() metoda u klasi koja određuje program. Dijelovi definicije klase koji određuju statične članove označeni su rezerviranom riječi "static" kao i main() metoda u programu.

Druga uloga klase je opisivanje objekata. Klasa jednog objekta određuje koji potprogrami i varijable su sadržani u tom objektu. Gledano sa strane opisivanja tipova vrijednosti podataka, klasa je tip, a objekt vrijednost toga tipa. Na primjer, String je ime klase koja je uključena kao uobičajeni dio Java jezika, zapravo tip, a "Hello World!" je vrijednost tipa String.

Dakle svi potprogrami su sadržani ili u klasama ili u objektima. Klase sadržavaju potprograme, statične članove, ali isto tako i opisuju objekte i potprograme sadržane u tim objektima. Ovakva dvojna uloga može biti zbunjujuća, ali u primjeni se klase definiraju tako da obavljaju isključivo jednu od ove dvije uloge. Iako klasa String u sebi sadržava nekoliko rijetko korištenih statičkih članova-potprograma, glavna namjena joj je da opisuje veliki broj potprograma sadržanih u objektima tipa String. Druga standardna klasa Math, postoji isključivo da bi okupila niz statičnih članova koji izračunavaju uobičajene matematičke funkcije.


Za početak promotrimo potprogram System.out.print. Ovaj potprogram je namijenjen prvenstveno ispisu informacija korisniku.

System je jedna od standardnih Java klasa, out je jedna od varijabli - statičnih članova te klase. Budući je sadržana u klasi System, puno ime koje se koristi u programima joj je System.out. Varijabla System.out se odnosi na objekt, a taj objekt sadržava potprogram print. Složeni naziv System.out.print odnosi se na potprogram print u objektu out klase System.

Budući se imena klasa i varijabli koriste na sličan način, teško je odrediti što je što. Sva ugrađena, unaprijed definirana imena u Javi slijede pravilo da imena klasa započinju s velikim slovom, dok imena varijabli počinju s malim slovom. Iako formalno ovo nije sintaksno pravilo, potrebno ga je poštovati pri programiranju. Imena potprograma također trebaju počinjati malim slovom. Zamjena varijable i potprograma ne može se dogoditi jer nakon imena potprograma stoji lijeva zagrada.

Svaki potprogram obavlja neku radnju. Potprogrami koji izračunavaju ili daju neku vrijednost zovu se funkcije. Kažemo da funkcija vraća vrijednost. Vraćene vrijednosti moraju na neki način biti upotrijebljene u programu. Tako, na primjer, funkcija Math.sqrt, koja izračunava kvadratni korijen nekog broja statički je član - potprogram klase Math. Ako je x neka numerička vrijednost, funkcija Math.sqrt(x) izračunava i vraća kvadratni korijen te vrijednosti. Kako Math.sqrt(x) predstavlja vrijednost, nema smisla da stoji samostalno kao poziv potprograma, potrebno je reći računalu što uraditi s tom vrijednošću, npr.:

	System.out.print( Math.sqrt(x) );
ili
	duzinaStranice = Math.sqrt(x);

Poziv funkcije Math.sqrt(x) predstavlja vrijednost tipa double i može se upotrijebiti na bilo kojem mjestu na kojem je moguće upotrijebiti takav tip.

Slijedi primjer programa koji obavlja nekoliko matematičkih operacija i izvješćuje o vremenu potrošenom na izvršavanje:

	public class VrijemeRacunanja {
		public static void main(String[] args) {

			long pocetnoVrijeme;	//vrijeme pocetka programa u milisekundama
			long krajnjeVrijeme;	//vrijeme kraja racunanja u milisekundama
			double vrijeme;		//razlika vremena u sekundama        
			pocetnoVrijeme = System.currentTimeMillis();        
			double sirina, visina, hipotenuza;	//stranice trokuta
			sirina = 42.0;
			visina = 17.0;           

			hipotenuza=Math.sqrt(sirina*sirina + visina*visina);           

			System.out.print("Trokut stranica 42 i 17 ima hipotenuzu ");
			System.out.println(hipotenuza);
       
			System.out.println("\nMatematički(x) + "
                                   + "cos(x)*cos(x) - 1 treba biti 0.");

			System.out.println("Provjerimo za x = 1:");

			System.out.print(" sin(1)*sin(1) + cos(1)*cos(1) - 1 je ");

			System.out.println( Math.sin(1)*Math.sin(1) 
                                   + Math.cos(1)*Math.cos(1) - 1 );

			System.out.println("(Kod računanja s realnim brojevima " 
                                   + " moze doći do greške pri zaokruživanju!)");

			System.out.print("\Slučajni broj:  ");

			System.out.println( Math.random() );

			krajnjeVrijeme = System.currentTimeMillis();

			vrijeme = (krajnjeVrijeme - pocetnoVrijeme) / 1000.0;

			System.out.print("\Vrijeme izvršavanja bilo je:  ");

			System.out.println(vrijeme);

		} // end main()

	} // end class VrijemeRacunanja


Vrijednost tipa String je objekt koji sadrži podatke, točnije niz znakova koji zajedno tvore string, i potprograme. Svi ti potprogrami su, zapravo, funkcije. Tako, na primjer, length funkcija računa dužinu stringa. Primjer poziva length funkcije varijable str:

	String str;
	str = "Ugrabi dan!";
	duzina=str.length();

str.length() je poziv funkcije koji daje broj karaktera u stringu. Vrijednost funkcije str.length() je int. Funkcija nema parametra, a string čiju dužinu izračunava je str.

Primjer programa koji daje dužinu stringa "Hello World!":

	System.out.print("The number of characters in ");             
	System.out.println("the string \"Hello World\" is ");
	System.out.println( "Hello World".length() );


Kod stringova je važno napomenuti da je korištenjem + operatora moguće vršiti zbrajanje stringova. Zbroj dvaju stringova je novi string koji se sastoji od svih znakova iz prvog stringa za kojima slijede svi znakovi drugog stringa. U praksi to izgleda ovako: "Hello"+"world" daje "Helloworld", dakle potrebno je voditi računa o razmacima između riječi.

Pretpostavimo li da je ime varijabla tipa String, pozdrav korisniku bi izgledao ovako:

	System.out.println("Dobar dan, "  +  ime  +  ".  Drago mi je da se vidimo!");

Korištenjem + operatora moguće je stringovima pribrajati i varijable primitivnih tipova i to tako da se vrijednost primitivnog tipa pretvori u string (onako kako bi izgledala ispisana na ekranu) i zatim zbroji stringu.

Na primjer izraz: "Broj"+42 daje string "Broj42", a izrazi:

	System.out.print("Nakon ");
	System.out.print(godine);
	System.out.print(" godina, vrijednost je: ");
	System.out.print(glavnica);

mogu biti zamijenjeni izrazom:

	System.out.print("Nakon " + godine + " godina, vrijednost je " + glavnica);

Očito, ovaj način zapisa je vrlo zgodan, na sličan način mogu biti skraćeni i neki raniji primjeri.


Posebnim znakovima smatraju se znakovi koji se inače mogu "ispisati" na ekranu (kao što je prijelaz u novi redak), ali za njih ne postoji posebna tipka na tipkovnici čiji biste znak naveli pod jednostrukim navodnicima. Posebni znakovi se navode pomoću prekidnog niza (escape sequence), kako su navedeni u sljedećoj tablici:

prekidni niz

vrijednost karaktera

 \b

backspace

 \t

horizontal tab

 \n

newline - prelazak u novi redak

 \f

from feed - prelazak na novu stranicu

 \r

carriage return - prelazak u novi redak

\"

double quote - dvostruki navodnik

 \'

single quote - jednostruki navodnik

\\

backslash - kosa crta

\aaa

znak koji odgovara oktalnoj vrijednosti aaa, a aaa mora biti od 000 - 377

\xaa znak koji odgovara heksadecimalnoj vrijednosti aa

\uaaaa

Unicode znak sa značenjem aaaa, gdje je aaaa heksadecimalan broj

Tablica 5.1. Prekidni nizovi za prikaz posebnih znakova




[ prethodna stranica | Početak | sljedeća stranica ]