Predstavitev se nalaga. Prosimo počakajte.

Predstavitev se nalaga. Prosimo počakajte.

Metode Funkcije, podprogrami.

Podobne predstavitve


Predstavitev na temo: "Metode Funkcije, podprogrami."— Zapis predstavitve:

1 Metode Funkcije, podprogrami

2 Zakaj metode? Doslej programi kratki, enostavni
Tudi naprej bodo taki ;-) "Pravi" programi so večji Tudi nekaj milijonov vrstic Ne moremo napisati v enem kosu Razdelitev v manjše kose Vsak kos posebej Java – metode Drugi prog. jeziki: funkcije, podprogrami, procedure, subrutine, ...

3 Pripravljene metode Doslej smo uporabljali že cel kup metod
določitev naključnega števila (Math.random()) Izris okna z obvestilom (JOptionPane.showMessageDialog(...)) Izračun sinusa (Math.sin(12.4)), izpis na zaslon (System.out.println("bla")) ... “Knjižnice” Metode lahko pišemo (sestavljamo) tudi sami Pravzaprav jih že ves čas main Lahko pa jih poimenujemo po svoje Metoda s točno predpisanim namenom / obliko / ...

4 Zakaj metode "skrivanje" postopka - metodo napišemo in jo potem lahko uporabimo, ne da bi skrbeli, kako je napisana preglednost programa program - zaporedje "neodvisnih" postopkov (branje podatkov, obdelava podatkov (lahko spet iz več neodvisnih postopkov), predstavitev rezultatov Nariši histogram Branje podatkov Normalizacija (koliko velika naj bo enota) Risanje

5 Izdelava mize Nariši načrt Iz načrta izdelaj spisek potrebnega materiala Nabavi material Ugotovi najugodnejšo ceno lesa Ugotovi najugodnejšo ceno barve Opravi nakup lesa Opravi nakup barve Sestavi mizo Nažagaj sestavne dele Združi sestavne dele Pobarvaj mizo ko kupujem, me ne zanima, kako bom npr. barval in ne, kako sem ugotovil, da potrebujem 3 l rdeče barve ko žagam, me ne zanima kako sem nabavil les

6 Kako deliti Pomembna odločitev Navadimo se predvsem s prakso Načela
Preglednost Uporabnost v drugih programih "samozadostnost“ Ne izpisujemo ali beremo, če to ni izrecni namen metode

7 Zakaj ne izpisujemo/beremo
Zakaj omejavati uporabnost metode? Če npr. podatek preberemo, metode ne bomo mogli uporabljati, če bomo podatek na primer izračunali! Če rezultat izpišemo, metode ne bomo mogli uporabiti, če bomo z rezultatom še kaj počeli. Primer: Sestavimo metodo, ki bo izračunala mesečni račun za elektriko za nekega naročnika Če bomo podatke o porabi prebrali znotraj metode, naše metode ne bomo mogli uporabiti v sistemu, ki podatke o porabi dobi avtomatsko Če bomo rezultat izpisali, metode ne bomo mogli uporabiti kot del sistema, ki izračuna povprečno porabo skupine uporabnikov

8 Vrste metod Statične Objektne Najprej bomo obravnavali le statične
Vsaka metoda vrača rezultat in sprejme argumente (parametri metode)

9 Primer public static int max(int a, int b) {
/* vrne vecje od dveh celih stevil */ if (a > b) return a; return b; // sem smo prišli le, če b >= a } x = max(12,x); System.out.println("Vecje med stevili " + a + " in " + c + " je " + max(a,c)); y = max(max(a,b) + max(c,d), 2 + max(100,x * x));

10 Kaj pomeni public static int (za public static) max (int a, int b)
Vsi deli programa lahko uporabljajo to metodo Do nadaljnega vse metode "public" static Statična metoda Do nadaljnega vse metode "static" int (za public static) Rezultat bo tipa int max Ime metode (poljubno!) (int a, int b) Argumenta metode Oba sta tipa int Formalni argument return Kakšen rezultat vrne metoda Konec izvajanja metode

11 Kako je videti program public class MojProgram {
// tu napisemo metode, eno za drugo // ne pozabimo napisati metode main! }

12 Kako je videti program import javax.swing.*; public class MojProgram {
public static int max(int a, int b) { /* vrne vecje od dveh celih stevil */ if (a > b) return a; return b; } public static void main(String[] parametri) { // določi največje število med prebranimi String pod; int x, y, z; int naj; pod = JOptionPane.showInputDialog("Prvo število: "); x = Integer.parseInt(pod); pod = JOptionPane.showInputDialog("Drugo število: "); y = Integer.parseInt(pod); pod = JOptionPane.showInputDialog("Tretje število: "); z = Integer.parseInt(pod); JOptionPane.showMessageDialog(null, "Največje število med " + x + ", " + y + " in " + z + " je " + max(x, max(y, z)));

13 Kako je videti program Definicija metode Klic metode Klic metode
public class MojProgram { public static int max(int a, int b) { /* vrne vecje od dveh celih stevil */ if (a > b) return a; return b; } public static void main(String[] parametri){ // določi največje število med prebranimi // ... JOptionPane.showMessageDialog(null, "Največje število med " + x + ", " + y + " in " + z + " je " + max(x, max(y, z))); Definicija metode Klic metode Klic metode

14 Formalni in dejanski argument
public class MojProgram { public static int max(int a, int b) { /* vrne vecje od dveh celih stevil */ if (a > b) return a; return b; } public static void main(String[] parametri) { // določi največje število med prebranimi // ... JOptionPane.showMessageDialog(null, "Največje število med " + x + ", " + y + " in " + z + " je " + max(x, max(y, z))); Formalna argumenta Dejanska argumenta Dejanska argumenta

15 Formalni in dejanski argumenti
Formalni argument Za opis delovanja metode Dejanski argument Začetna vrednost argumenta metode Klic max(12, y) Spremenljivka (parameter) a v metodi dobi vrednost 12 Parameter b v metodi dobi vrednost, ki je shranjena v spremenljivki y

16 Klic funkcije ime(dejanski parametri) ujemanje parametrov
Število parametrov Tip (prenaša se vrednost parametra) max(12, 23 * 7) max(a - b, x)

17 Odgovori Kako je ime metodi?
public static int vsota(int n) { int r = 1; int i = 1; while (i < n) { i = i + 1; r = i * r; } return r; Kako je ime metodi? Kakšen je tip rezultata, ki ga vrača metoda? Koliko argumentov sprejme metoda? Kakšni so tipi in imena argumentov? Kaj metoda počne? Ali lahko predlagaš boljše ime za metodo? Napiši program Demo.java, ki demonstrira delovanje metode.

18 Zgled Napiši metodo inicialke, ki sprejme dva niza znakov (ime in priimek) in vrne niz sestavljen iz inicialk. Na primer, inicialke("France", "Preseren") naj vrne niz "F.P.". Ime metode inicialke Tip metode String Število argumentov 2 Tip in imena argumentov String ime String priimek

19 Inicialke public static String inicialke(String ime, String priimek) {
char zp, zi; zi = ime.charAt(0); zp = priimek.charAt(0); return zi + "." + zp + "."; }

20 Kaj so argumenti in kaj tipi metod
public static String prvaBeseda(String besedilo) public static double[] produkt(double[] A, double[] B) public static void foo() public static int najdi(String geslo, String[] slovar)

21 Glave metod Za vsakega od naslednjih opisov zapišimo deklaracijo metode (kakšen tip metoda vrača in kakšne argumente sprejme) Metoda, ki v podani tabeli nizov poišče najdaljši niz in ga vrne. public static String najdaljsi(String[] a) Metoda, ki najde eno izmed obeh rešitev dane kvadratne enačbe (pod predpostavko, da so rešitve realna števila). public static double kvadratna(double a, double b, double c) Metoda, ki dano tabelo nizov uredi po abecedi in vrne urejeno tabelo. public static String[] uredi(String[] a)

22 Kaj naredi ta program import javax.swing.*; public class KajProgram {
public static int povecaj(int a) { // povecam a za 1 a = a + 1; return a; } public static void main(String[] parametri) { String pod; int a; int naj; pod = JOptionPane.showInputDialog("Število: "); a = Integer.parseInt(pod); naj = povecaj(a); JOptionPane.showMessageDialog(null, "naj = " + naj + "\na = " + a);

23 Parametri se prenašajo po vrednosti
Ob klicu parameter metode dobi vrednost, kot je določena v dejanskem parametru Potem ni nobene povezave med dejanskim in formalnim parametrom

24 Metoda za “povečanje” import javax.swing.*; public class KajProgram {
public static int povecaj(int a) { // povecam a za 1 a = a + 1; return a; } public static void main(String[] parametri) { String pod; int a; int naj; pod = JOptionPane.showInputDialog("Število: "); a = Integer.parseInt(pod); a = povecaj(a); // če želimo a povečati za 1 JOptionPane.showMessageDialog(null, "naj = " + naj + "\na = " + a);

25 Tabela Sestavi tabelo naključnih celih števil med 1 in 100.
Prepiši jih v novo tabelo tako, da bodo v novi tabeli najprej elementi, ki imajo v prvi tabeli indekse 0, 2, 4, ...., potem pa še elementi z lihimi indeksi. Če ima prvotna tabela elemente 2, 4, 23, 5, 45, 6, 8 so v novi tabeli elementi razporejeni kot 2, 23, 45, 8, 4, 5, 6. Izpiši obe tabeli po 10 v vrsto.

26 Tabela Razbijemo na metode
Generiraj – ustvari tabelo Preloži – preloži na zahtevan način Izpiši – izpiše po 10 v vrsto public static int[] generiraj(int velikostTab, int sm, int zm) public static int[] prelozi(int[] tabela) public static void izpisi(int[] tabela)

27 Tabela – glavni program
public static void main(String[] arg) { // generiraj nakljucno tabelo // prelozi v novo,. tako da so elementi s sodimi // indeksi pred lihimi int veltab = Integer.parseInt(arg[0]); // parameter programa je velikost tabele int[] tabOrig; int[] tabNova; int sM = 1; // spodnja meja stevil v tabeli int zM = 100; // zgornja meja stevil v tabeli tabOrig = generiraj(veltab, sM, zM); tabNova = prelozi(tabOrig); izpisi(tabOrig); izpisi(tabNova); }

28 Najmanjši na začetek Napiši metodo najmanjsi_na_zacetek, ki sprejme tabelo celih števil in v njej zamenja ničti in najmanjši element tabele. Na primer, ko poženemo int[] b = {10, 4, 7, 18, 2, 7}; najmanjsi_na_zacetek(b); je tabela b enaka {2, 4, 7, 18, 10, 7}.

29 Najmanjši na začetek t[kje] = t[0]; t[0] = min; Tip metode: void
Kar počnemo s tabelami, ki so parametri, SE POZNA na tabeli! Zakaj – trenutno še “skrivnost” Poiščemo najmanjšega Zamenjamo 0-tega in najmanjšega Potrebujemo indeks! t[kje] = t[0]; t[0] = min;

30 Najmanjši na začetek Poiščemo najmanjšega int kje = 0; int min = t[0];
Zapomnimo si tako najmanjšega, kot njegov indeks Kandidat za najmanjšega je 0-ti int kje = 0; int min = t[0]; V zanki pregledamo vse preostale Če je tekoči element manjši od trenutno najmanjšega, si njegovo vrednost in njegov indeks zapomnimo if (t[i] < min) { min = t[i]; kje = i; }

31 main(String[] args) Sedaj to razumemo! args je ima parametra metode
args je tipa tabela nizov Misterij Kdo pokliče metodo main in ji poda parametre?

32 Kaj je String[] args Parametri metode main

33 Kvader Sestavimo program, ki sprejme iz ukazne vrstice tri pozitivna števila in izpiše volumen kvadra s temi stranicami. java Kvader

34 Kvader public class Kvader { // izracunamo volumen kvadra
public static void main(String[] par) { int a, b, c; int volumen; a = Integer.parseInt(par[0]); b = Integer.parseInt(par[1]); c = Integer.parseInt(par[2]); volumen = a * b * c; System.out.println("" + volumen); }

35 Branje iz ukazne vrstice
V args dobimo parametre s katerim poženemo program Ločeni s presledki nizi java bla 12 5 ma V args[0] je "12" V args[1] je "5" V args[2] je "ma" args.length – length vrne število parametrov (velikost tabele)

36 Tabele - length Komponenta (lastnost) length vrne velikost tabele
NI! metoda (kot pri String) int[] tabela = new int[20]; tabela.length Dobimo 20 String bla = "bleble"; bla.length() 6 Pomni! Pri nizih dolžino zvemo z metodo length / niz.length() / Pri tabelah zvemo velikost (rezerviran prostor) z lastnostjo length / tabela.length /

37 Izpiši vse argumente public class Program {
public static void main(String[] param) { int st_param, i; st_param = param.length; System.out.println("Program ima " + st_param + " parametrov: "); i = 0; while (i < st_param){ System.out.println(i + ". param. = " + param[i]); i = i + 1; }   }

38 Kontrola napačnega zagona
Če bo kdo naš program pognal brez argumentov ali z napačnimi argumenti Program se "sesuje" Izpis obvestila, kako je potrebno pognati program if (par.length != 3) { System.out.println("Klic\n\n java Kvader a b c\n"); System.out.println("kjer so a b c mere kvadra!\n"); System.out.println("Podatki so pozitivna cela števila!"); } Še vedno se bo program "sesul", če bomo dali tri parametre, a napačne vrste Možno lovljenje napak try / catch konstrukcija Oglejte si sami

39 Preštejmo samoglasnike v nizu
Ali potrebujemo metodo: načeloma ne! import javax.swing.*; public class Samoglasniki { // presteje samoglasnike v nizu public static void main(String[] mm) { String samoglasniki = "AEIOUaeiou"; String niz = JOptionPane.showInputDialog("Vnesi poljubno besedilo!"); int dol_niza = niz.length(); // dolzina niza int i = 0; int st_samo = 0; // stevilo samoglasnikov while(i < dol_niza) { // pregledamo vse znake char znak=niz.charAt(i); if (samoglasniki.indexOf(znak) != -1) { // znak je samoglasnik st_samo = st_samo + 1; } i = i + 1; String rezultat = " V nizu " + niz + " je " + st_samo + " samoglasnikov!"; JOptionPane.showMessageDialog(null, rezultat, "Stevilo samoglasnikov v nizu", JOptionPane.PLAIN_MESSAGE);

40 Preštejmo samoglasnike v nizu
Denimo, da bi radi ugotovili, kateri niz med dvema ima več samoglasnikov. “podvojimo” kodo Podvojeno kodo malo spremenimo drug niz, nove spremenljivke, ... Bomo “polovili” vse potrebne spremembe?

41 Preštejmo samoglasnike v nizu
public class Samoglasniki_dva { // Igotovi, kateri niz ima več samoglasnikov public static void main(String[] mm) { String samoglasniki = "AEIOUaeiou"; // prvi niz String niz1 = JOptionPane.showInputDialog("Vnesi prvi niz: "); int dol_niza = niz1.length(); // dolzina niza int i = 0; int st_samo1 = 0; // stevilo samoglasnikov while(i < dol_niza) { // pregledamo vse znake char znak = niz1.charAt(i); if (samoglasniki.indexOf(znak) != -1) { // znak je samoglasnik st_samo1 = st_samo1 + 1; } i = i + 1; // drugi niz String niz2 = JOptionPane.showInputDialog("Vnesi drugi niz: "); dol_niza = niz2.length(); // dolzina niza i = 0; int st_samo2 = 0; // stevilo samoglasnikov char znak = niz2.charAt(i); st_samo2 = st_samo2 + 1;

42 Preštejmo samoglasnike v nizu
String rezultat = " V nizu " + niz1 + " je " + st_samo1 + " samoglasnikov.\n"; rezultat = rezultat + " V nizu " + niz2 + " je " + st_samo2 + " samoglasnikov.\n "; if (st_samo2 > st_samo1) { rezultat = rezultat + "Več samoglasnikov je torej v nizu " + niz2; } else { if (st_samo2 == st_samo1) { rezultat = rezultat + "V obeh nizih je torej enako število samoglasnikov. "; } else { rezultat = rezultat + "Več samoglasnikov je torej v nizu " + niz1; JOptionPane.showMessageDialog(null, rezultat, "Primerjava stevila samoglasnikov v nizu", JOptionPane.PLAIN_MESSAGE);

43 Preštejmo samoglasnike v nizu - metoda
Ugotavljanje števila samoglasnikov izločimo v metodo tip rezultata int Parametri En sam, tipa String Iz Samoglasnik.java: vrstice 6 – 17 Izločimo v. 7: branje podatka (dobimo ga kot parameter!)

44 Preštejmo samoglasnike v nizu - metoda
public class Samoglasniki_metoda { // Ugotovi, kateri niz ima več samoglasnikov public static int steviloSamoglasnikov(String niz) { // vrne stevilo samoglasnikov v nizu niz String samoglasniki = "AEIOUaeiou"; int dol_niza = niz.length(); // dolzina niza int i = 0; int st_samo = 0; // stevilo samoglasnikov while(i < dol_niza) { // pregledamo vse znake char znak=niz.charAt(i); if (samoglasniki.indexOf(znak) != -1) { // znak je samoglasnik st_samo = st_samo + 1; } i = i + 1; return st_samo; public static void main(String[] mm) {

45 Preštejmo samoglasnike v nizu - metoda
// prvi niz String niz1 = JOptionPane.showInputDialog("Vnesi prvi niz: "); int st_samo1 = steviloSamoglasnikov(niz1); // drugi niz String niz2 = JOptionPane.showInputDialog("Vnesi drugi niz: "); int st_samo2 = steviloSamoglasnikov(niz2); String rezultat = " V nizu " + niz1 + " je " + st_samo1 + " samoglasnikov.\n"; rezultat = rezultat + " V nizu " + niz2 + " je " + st_samo2 + " samoglasnikov.\n "; if (st_samo2 > st_samo1) { rezultat = rezultat + "Več samoglasnikov je torej v nizu " + niz2; } else { if (st_samo2 == st_samo1) { rezultat = rezultat + "V obeh nizih je torej enako število samoglasnikov. "; } else { rezultat = rezultat + "Več samoglasnikov je torej v nizu " + niz1; JOptionPane.showMessageDialog(null, rezultat, "Primerjava stevila samoglasnikov v nizu", JOptionPane.PLAIN_MESSAGE);

46 5 minut za jezik Izpis nam ni preveč všeč Popravimo:
Ustrezen niz naj nam generira metoda! Tip rezultata: String Parametri: en, tipa int (število samoglasnikov)

47 Uporaba metod iz drugih programov
Poenostavljena zgodba Zares Kasneje, ko bo govora o objektih, razredih, .. Datoteka: NekiProgram.java V njej metoda: MetodaA public static int metodaA(int x) Datoteka: DrugiProgram.java Klic metode: NekiProgram.metodaA(izrazTipaInt) Metode drugih programov (razredov) torej kličemo kot ImeRazreda.imeMetode(parametri) Velja za metode z določili static in public

48 Zgled s tabelo v dveh razredih
Sestavi tabelo naključnih celih števil med 1 in 100. Prepiši jih v novo tabelo tako, da bodo v novi tabeli najprej elementi, ki imajo v prvi tabeli indekse 0, 2, 4, ...., potem pa še elementi z lihimi indeksi. Razbijemo na metode Generiraj – ustvari tabelo Preloži – preloži na zahtevan način Izpiši – izpiše po 10 v vrsto En razred naj vsebuje metode public static int[] generiraj(int velikostTab, int sm, int zm) public static void izpisi(int[] tabela) Drugi public static int[] prelozi(int[] tabela)


Prenesi ppt "Metode Funkcije, podprogrami."

Podobne predstavitve


Oglasi od Google