90 likes | 366 Views
Järjendit tagastavad meetodid. Kahekordne tsükkel. 6. loeng. void m(form. param. loetelu){ < teha ära mingi tegevus (parameetreid arvestades)> }. Tühitüüpi meetod m. Erijuht: tegevuseks on antud järjendi elementide väärtuste muutmine (näiteks järjendi sorteerimine).
E N D
void m(form. param. loetelu){ < teha ära mingi tegevus (parameetreid arvestades)> } Tühitüüpi meetod m Erijuht: tegevuseks on antud järjendi elementide väärtuste muutmine (näiteks järjendi sorteerimine) void m( tüüp[ ] a, …){ // muuta järjendi a elementide väärtusi // (tavaliselt tsüklis, i = 0, 1, …, a.length-1): … a[i] = …; … } lihttüüp m(form. param. loetelu){ < leida vastus: väärtus tüüpi lihttüüp (parameetreid arvestades)> return <avaldis tüüpi lihttüüp> ; } Lihttüüpi meetod m Nt: int double boolean
Järjendit tagastav meetod Nt: int[] double[] String[] tüüp[ ] m(form. param. loetelu){ //(parameetreid arvestades) // leida uue järjendi pikkus: … // teha uus järjend: tüüp[ ] uus = new tüüp[pikkus]; // omistada väärtused uue järjendi elementidele // (tavaliselt tsüklis, i = 0, 1, …, uus.length-1): … uus[i] = …; … // tagastada viit uuele järjendile: return uus; }
int[] hinne; hinne = rahvaPoolt(); static int[ ] rahvaPoolt(){ // Antud: - // Tulemus: luuakse uus järjend pikkusega 7, kus // elementide väärtused on juhuarvud lõigult [0; 40] // teha uus järjend: int[ ] uus = new int[7]; // omistada väärtused uue järjendi elementidele: for(int i = 0; i < 7; i++){ uus[i] = (int)(Math.random()*41); } // tagastada viit uuele järjendile: return uus; }
Tsükkel Korrata iga i korral (i = …): <sooritada korratav tegevus, tavaliselt i väärtusest sõltuvalt> Kahekordne tsükkel: korratav tegevus on omakorda tsükkel (või sisaldab tsüklit) Korrata iga i korral (i = …): Korrata iga j korral (j = …): <sooritada korratav tegevus, tavaliselt i ja j väärtusest sõltuvalt> Välimine tsükkel Sisemine tsükkel
static void sortM(int[] a){ // Antud: järjend a // Tulemus: järjend sorteeritud mittekahanevalt // Algoritm: mullimeetod for(int i = a.length-1; i >= 1; i--){ // järjendi osas a[0] .. a[i] viia suurim viimasele kohale // naaberelementide väärtuste vahetamise teel: for(int j = 0; j < i-1; j++){ // kui naabrid a[j] ja a[j+1] ei ole õiges järjestuses, // siis vahetada: if(a[j] > a[j+1] ){ int x = a[j]; a[j] = a[j+1]; a[j+1] = x; } } } }
static void sort(int[] a){ // Antud: järjend a // Tulemus: järjend sorteeritud mittekahanevalt // Algoritm: pistemeetod --- vt Aabits, Järjendid (II) for(int i = 1; i < a.length; i++){ // a[0] ... a[i-1] on mittekahanevas järjestuses int b = a[i]; // talletada a[i] int j; // teha pistekoht (j+1) osas a[0] ... a[i-1] väärtusele b: for(j = i-1; j >= 0; j--){ if(a[j] <= b) break; a[j+1] = a[j]; } a[j+1] = b; // pista b oma kohale } }
Kahe järjendina antud andmete sorteerimine Näide. Olgu antud 1) tantsijate nimede järjend, näiteks String[] nimi = {“Gerly”, “Erki”, “Indrek”, “Ingrid”, “Aivar”, “Mikk”, “Vilja” }; 2) nendele pandud hinnete järjend (samas järjestuses) int[] hinne = {36, 26, 30, 28, 29, 26}; Ülesandeks on sorteerida hinnete mittekasvamise järjekorras nii hinded kui ka nimed. Vastav meetod on järgmisel slaidil, selle rakendamine: sort(hinne, nimi);
static void sort(int[] a, String[] nimi){ // Antud: järjendid a ja nimi // Tulemus: järjendid sorteeritud mittekasvavalt, a väärtuste järgi // Algoritm: pistemeetod for(int i = 1; i < a.length; i++){ // a[0] ... a[i-1] on mittekahanevas järjestuses int b = a[i]; // talletada a[i] String bb = nimi[i]; // talletadanimi[i] int j; for(j = i-1; j >= 0; j--){ if(a[j] > b) break; a[j+1] = a[j]; nimi[j+1] = nimi[j]; } a[j+1] = b; // pista b oma kohale nimi[j+1] = bb; // pista bb oma kohale } }