Föreläsning 7 Metoder Parametrar Klassmetod
Metoden addera Metodnamn addera Beskrivning: Metoden frågar användaren efter två tal och skriver sedan ut resultatet: A + B = C Parametrar: - Returvärde: -
Metoder ger struktur * * En tabell Kapital1.java import extra.*; public class Kapital1 { public static void main(String[] args) { double kapital, räntesats; int antalÅr; System.out.print("Ange kapital: "); kapital = Input.readDouble(); System.out.print("Ange räntan i decimalform (3% som 0.03): "); räntesats = Input.readDouble(); System.out.print("Ange antalet år som kapitalet växer: "); antalÅr = Input.readInt(); System.out.println(); System.out.println("Startkapital: "+kapital); System.out.println("År Kapital"); for(int år=1; år<=antalÅr; år++) { kapital = kapital + räntesats*kapital; System.out.println(Output.format(år,2)+Output.format(kapital,10,0)); } Kapital1.java * * En tabell
Metoder ger struktur Kapital2.java import extra.*; public class Kapital2 { public static void sammansattRänta(double summa, double räntesats, double antalÅr) { System.out.println("Startkapital: "+summa); System.out.println("År Kapital"); for(int år=1; år<=antalÅr; år++) { summa = summa + räntesats*summa; System.out.println(Output.format(år,2)+Output.format(summa,10,0)); } public static void main(String[] args) { double kapital, räntesats; int antalÅr; System.out.print("Ange kapital: "); kapital = Input.readDouble(); System.out.print("Ange räntan i decimalform (3% som 0.03): "); räntesats = Input.readDouble(); System.out.print("Ange antalet år som kapitalet växer: "); antalÅr = Input.readInt(); System.out.println(); Kapital2.sammansattRänta(kapital,räntesats,antalÅr); Kapital2.java
Metoder kan vara nyttiga import extra.*; public class Kapital2 { public static void sammansattRänta(double summa, double räntesats, double antalÅr) { System.out.println("Startkapital: "+summa); System.out.println("År Kapital"); for(int år=1; år<=antalÅr; år++) { summa = summa + räntesats*summa; System.out.println(Output.format(år,2)+Output.format(summa,10,0)); } public static void main(String[] args) { double kapital, räntesats; int antalÅr; System.out.print("Ange kapital: "); kapital = Input.readDouble(); System.out.print("Ange räntan i decimalform (3% som 0.03): "); räntesats = Input.readDouble(); System.out.print("Ange antalet år som kapitalet växer: "); antalÅr = Input.readInt(); System.out.println(); Kapital2.sammansattRänta(kapital,räntesats,antalÅr); Ledtext + Läsa in double Ledtext + Läsa in double Ledtext + Läsa in int
Metoder kan vara nyttiga import extra.*; public class Kapital3 { public static void sammansattRänta(….) { // samma kod som förra sidan } public static double getDouble(String text) { double tal; System.out.print(text); tal = Input.readDouble(); return tal; public static int getInt(String text) { return Input.readInt(); public static void main(String[] args) { double kapital, räntesats; int antalÅr; kapital = Kapital3.getDouble("Ange kapital: "); räntesats = Kapital3.getDouble("Ange räntan i decimalform (3% som 0.03): "); antalÅr = Kapital3.getInt("Ange antalet år som kapitalet växer: "); System.out.println(); Kapital3.sammansattRänta(kapital,räntesats,antalÅr); Kapital3.java
Klassmetoder En metod som deklareras som static kallas för en klassmetod. public static void meddelande(String txt) { } En klassmetod anropas med hjälp av klassnamnet följt av en punkt: Output.meddelande(”Hej”); Klassen heter Output och metoden heter meddelande. Det behövs inget objekt av typen Output för att anropa meddelande. Däremot måste programmet ha tillgång till filen Output.class. import extra.*; // Output.class finns i extra-paketet
Att skriva metoder Metodnamn hundraÅr1 Beskrivning: Metoden frågar användaren om åldern år 2002 och berättar när vederbörande fyller 100 år. Parametrar: - Returvärde: - public static void hundraÅr1() { int ålder, årtal; System.out.print(”Ange ålder: ”); ålder = Input.readInt(); årtal = 2002+(100-ålder); System.out.println(”År ”+årtal+” fyller du 100 år”); } Metod1.java
Att skriva metoder Metodnamn hundraÅr2 Beskrivning: Metoden berättar när vederbörande fyller 100 år. Parametrar: ålder (int) Returvärde: - public static void hundraÅr2(int ålder) { int årtal = 2002+(100-ålder); System.out.println(”År ”+årtal+” fyller du 100 år”); } Vad är det för skillnad mellan metoderna? Metod2.java Skillnad.java public static void hundraÅr1() { int ålder, årtal; System.out.print(”Ange ålder: ”); ålder = Input.readInt(); årtal = 2002+(100-ålder); System.out.println(”År ”+årtal+” fyller du 100 år”); }
Att skriva metoder Metodnamn hundraÅr3 Beskrivning: Metoden returnerar det år då personen fyller 100 år Parametrar: ålder (int) Returvärde: årtal (int) public static int hundraÅr3(int ålder) { return (2002+(100-ålder)); } Metod3.java
Att skriva metoder Metodnamn biljettPris Beskrivning: Metoden returnerar biljettpriset för bifogade personer. Barn: 60 kr, vuxen: 110 kr, pensionär: 80 kr Parametrar: vuxna (int), barn (int), pensionärer (int) Returvärde: biljettpris (long) public static long biljettPris(int vuxna, int barn, int pensionärer) { return vuxna*110+barn*60+pensionärer*80; } Diverse.java
Att skriva metoder Metodnamn tecken Beskrivning: Metoden returnerar ’+’ om bifogat tal är positivt, ’0’ om bifogat tal är noll ’-’ om bifogat tal är negativt. Parametrar: tal (int) Returvärde: talets tecken (char) public static char tecken(int tal) { char tkn = ’+’; if(tal<0) tkn = ’-’; else if(tal==0) tkn = ’0’; return tkn; } Hur testar man metoden? if(tal<0) return ’-’; else if(tal==0) return ’0’; else return ’+’;
Att skriva metoder Metodnamn intervall Beskrivning: Metoden returnerar true om ett tal är i ett intervall false om talet är utanför intervallet Parametrar: tal (int), min (int), max (int) Returvärde: boolean public static boolean intervall(int tal, int min, int max) { if(tal>=min && tal<=max) return true; else return false; } Hur testar man metoden? return (tal>=min && tal<=max);
Samla metoder i en klass Metoder som funktionsmässigt hör ihop kan man samla i samma klass. Exempel: I klassen Input finns det metoder för inmatning av variabler och paus-metoder. Man skriver metoderna i samma klass. Glöm inte att klassens namn ska börja med stor bokstav medan metodernas namn ska börja med liten bokstav. Använd endast bokstäverna a-z, A-Z och siffror i klassnamnet. public class Diverse { public static long biljettPris(int vuxna, int barn, int pensionärer ) { return vuxna*110+barn*60+pensionärer*80; } public static char tecken(int tal) { // kod } public static boolean intervall(int tal, int min, int max) { // kod } } Diverse.java
Placera en klass i ett paket När man skrivit in metoderna i en klass är det dags att bestämma var klassen ska lagras. Detta gör man med package-kommandot. Package-kommandot ska inleda java-filen. package diverseInlProg; // börja med liten bokstav Filen ska lagras i en katalog med paketets namn. JB: Denna katalog ska ligga i Source. När du kompilerar java-filen så JDK: placeras class-filen i aktuell katalog JB: placeras class-filen i motsvarande katalog i Output Path (normal classes i projektkatalogen). Placera slutligen paketet i M:\java eller där JBuilder 5 hittar katalogen. Diverse2.java
Överlagrade metoder Ibland är det praktiskt om en metod kan ta emot olika typer av parametrar. Detta har du använt dig av vid utskrifter: System.out.println(); System.out.println(”Hej”); System.out.println(123); println-metoden är definierad för flera variabeltyper. Att deklarera ett antal metoder med samma namn men med olika parameterlistor kallas för att överlagra metoder. Om vi tittar i klassen String så finner vi flera exempel på överlagrade metoder, t.ex.: int compareTo 2 versioner int indexOf 4 versioner static String valueOf 9 versioner
Överlagrade metoder Metoden public char tecken(int tal) borde gå att använda även med flyttal. Vi skriver därför en tecken-metod som tar emot en double som parameter: public char tecken(double tal) { char tkn = ’+’; if(tal<0) tkn = ’-’; else if(tal==0) tkn = ’0’; return tkn; }
Metoden F7.pow (upphöjt till) Metodnamn pow (placeras i klassen F7) Beskrivning: Metoden beräknar ax. Om x<0 så returnerar metoden –1. Parametrar: a (int), x (int) Returvärde: resultatet av beräkningen (long) Testprogram vilket skriver ut resultatet av: (-5)-5, …, (-5)-1, (-5)0, (-5)1, …, (-5)5 0-5, …, 0-1, 00, 01, …, 05 5-5, …, 5-1, 50, 51, …, 55