Föreläsning4 Repetition slingor Metoder
while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int i=0; while (i<10) { System.out.println(”programmering är kul”); i++; }
Operatorer && och || Skriv et program som ställer 2 följande frågor av användaren: 1.Är det en java bok du vill köpa? 2.Vad kostar boken? Sedan råder programmet med en utskrift om användaren ska gå till skolan eller inte, följande är regler: ”köp inte”: om det inte är en Java bok ”köp inte”: om det är en Java bok och priset är mer än 300. ”köp snabbt”: om det är en Java bok och priset är mindre än 300.
Metoder Vissa beräkningar behöver man göra ofta i ett program. Istället för att skriva satserna som utför beräkningen flera gånger kan man definiera en metod som gör beräkningen en gång och sedan anropa metoden flera gånger. Genom att deklarera metoder så minskar man kod upprepningar och gör det att man får mindre kod och därmed får man ett kortare program.
Exempel import java.io.*; class Person { public static void main(String[] args)throws IOException{ String namn; int ålder; String mailAdress; BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); System.out.print(”Vad heter du?”); namn = stdin.readLine(); System.out.print(”Hur gammal är du?”); String ålderStr = stdin.readLine(); ålder = Integer.parseInt(ålderStr); System.out.print(”vad har du för ?”); mailAdress = stdin.readLine(); int född = ålder; System.out.println(namn+” är född år ” +född+” kan nås via mail: ”+ mailAdress); } }
Vilka delar i main upprepas flera gånger … public static void main(String []args)throws IOException{ System.out.print(”Vad heter du?”); namn = stdin.readLine(); System.out.print(”Hur gammal är du?”); String ålderStr =stdin.readLine(); ålder = Integer.parseInt(ålderStr); System.out.print(”vad har du för ?”); mailAdress = stdin.readLine(); int född = ålder; System.out.println(namn+” är född år ” +född+” kan nås via mail: ”+mailAdress); } 1 2 3
Hur fungerar metoder? Är som ett recept eller en funktion Satserna i metoden utförs bara då metoden anropas Inparametrar – indata, information som behövs i metoden Returvärde – utdata, metodens resultat
Deklaration av metoder static String metodnamn(String parameternamn) Returtyp (utdata typ) i detta fall String Indata typ i detta fall String De får vi välja hur som helst
Hur deklarerar man en metod? Returvärdets typ/klass –Primitiv datatyp t ex int, double –Referens datatyp t ex String, Color –void om metoden inte returnerar något Metodens namn Formella parametrars typ och namn –Skrivs inom parentes Satser (det metoden ska göra varje gång den anropas) Retursats (krävs bara för metod som returnerar något) –Det värde som returneras måste vara av samma typ som angavs i början av metoddefinitionen
System.out.print(”Vad heter du?”); namn = stdin.readLine(); System.out.print(”Hur gammal är du?”); String ålderStr =stdin.readLine(); System.out.print(”vad har du för ?”); mailAdress = stdin.readLine(); på vilket sätt är de lika? Det syns att System.out.println() anropas (används) i första raden i alla tre delar. Det syns att stdin.readLine() anropas (används) i andra raden i alla tre delar. vad finns för olikheter då? t.ex ”vad heter du”, ”hur gammal är du” och ”vad har du för ” är olika men alla är av samma typ alltså String.
static String läsSvar(String frågan){ System.out.println(frågan); String svar = stdin.readLine(); return svar; } Metoden kommer att se ut som nedan
Följande modell hjälper att skriva ihop en metod som vi önskar. Metod ”vad heter du?” ”Hur gammal är du?” ”vad har du för ?” Det syns att metoden tar en strängar som indata och returnerar den inlästa strängen som utdata ”vahid” ”18” Metoden har till uppgift att skriva ut på skärmen den sträng som kommer in som indata till metoden samt låta användaren mata in en sträng och inmatade strängen ska returneras.
Den nya klasskoden ser så här ut import java.io.*; class Person { public static void main(String[] args)throws IOException{ String mailAdress; BufferedReader stdin = new BufferedReader( new InputStreamReader(System.in)); String namn = läsSvar (”Vad heter du?”); String ålderStr = läsSvar(”Hur gammal är du?”); int ålder = Integer.parseInt(ålderStr); System.out.print(”vad har du för ?”); mailAdress = läsSvar (”vad har du för ?”); int född = ålder; System.out.println(namn+” är född år ” +född+” kan nås via mail: ”+ mailAdress); } static String läsSvar(String frågan){ System.out.println(frågan); String svar = stdin.readLine(); return svar; }
main Program m1() m2() m3() indata
main Program m1() m2() m3() utdata
Typkonvertering (cast) Används när man explicit vill ändra typen av ett uttryck. Exempel: double x = 2.75; int i = (int) x; i får här värdet 2 Fungerar bara för rimliga konverteringar.
Exempel Skriv ett program som frågar efter radien för en cirkel och beräknar omkrets och arean för cirkeln med hjälp av två metoder. -utöka programmet sedan så att programmet frågar om man vill ange ett nytt radie avrje gång, så att man kan beräkna flera gånger utan att programmet avslutas.