Nyckelord: metoder, anropa metod, inparametrar, argument
Den här artikeln kommer visa hur man kan anropa en metod i Java (engelska: call a method), med andra ord, hur man använder en metod. Vi kommer se exempel på hur man genom att skapa flera små metoder, sedan kan använda dem för att tillsammans utgöra ett större program.
När man vill använda en skapad metod så säger man att man anropar man den metoden. För att anropa metoden så anger man metodens namn och eventuella inparametrar. När en parameter skickas till metoden kallas den för ett argument.
För att anropa en metod i Java skriver vi:
Om vi skriver in punkterna i listan ovan i kodeditorn så får vi
metodensNamn (input parametrar);
När vi skickar en parameter till en metod kallas den för ett argument. Observera att när du arbetar med flera parametrar måste metodanropet ha samma antal argument som det finns parametrar och argumenten måste skickas i samma ordning. Med andra ord, om du har metoden nedan
public static void exMethod (int a, String b, double c){ }
Så ska alla argument in till metoden finnas och vara i ordningen int, string och double. Relaterat till det, om metoden inte har några inparametrar så kan vi självklart inte ange några.
Genom att skapa flera små metoder i Java, kan dessa användas för att skapa stora program.
Om metoden returnerar ett värde, kan man tilldela detta till en variabel av samma datatyp. Om vi har en metod som returnerar något och vill spara ned det i en variabel så skriver vi enkelt
datatyp variabelNamn = metodensNamn (input parametrar);
Viktigt att vara uppmärksam på vad metoden returnerar för datatyp. Kom ihåg, vill vi spara ned värden i en annan datatyp än vad som returneras från metoden så löser vi det med hjälp av typkonvertering.
Nu har vi sett hur man skapar och anropar metoder i Java, men låt oss nu ta ett par exempel för att använda det vi har gått igenom.
Låt oss börja med ett enklare exempel. Nedan har vi skapat en metod som heter min_metod. Vi har angett att metoden ska returnera en int och ha två inparametrar, num1 och num2, av typen int. Det metoden gör är att utföra en multiplikation mellan num1 och num2 och sedan returnera värdet
public static int min_metod(int num1, int num2){ return num1 * num2; }
Om vi illustrerar metoden får vi,
Vi kan nu anropa metoden med dess metodnamn:
int a = min_metod(5, 4);
Låt oss testa några fler fall
int a = min_metod(5, 4); int b = min_metod(3, 2); int c = min_metod(1, 8);
Skriver vi ut variablerna får vi
System.out.println(a); System.out.println(b); System.out.println(c);
Vilket resulterar i
20 6 8
Vill du testa koden ovan själv, klicka på knappen nedan för att testa den online.
Vi ska nu testa skapa flera olika metoder i Java och sedan anropa dessa. Vi ska programmera en räknare som håller reda på hur många personer det är inne i en butik. I exemplet använder vi klassen scanner för att ta in information av användaren.
Vi börjar med en väldigt enkel metod, det enda den ska göra är att lägga till en person
//Öka variabeln nmbrOfPeople med ett public static void increaseValue(){ nmbrOfPeople++; }
Vidare, på motsvarande sätt skapar vi en metod som ska ta bort en person
//Metoden minskar variabeln nmbrOfPeople med ett public static void decreaseValue(){ nmbrOfPeople--; }
Sedan vill vi även ha metod som returnerar värdet på nmbrOfPeople
//Metoden returnerar värdet på nmbrOfPeople public static int getNmbrOfPeople(){ return nmbrOfPeople; }
Vidare, vi skriver även en metod som ger uppmaningar till användaren. Skriver användaren “ÖKA” så ska antal personer i butiken öka. På motsvarande sätt, om användaren skriver “SÄNK” så ska programmet sänka antal personer i butiken med ett.
// Denna metod returnerar det användaren skriver in. // I detta fall returneras en String public static String getInputsFromScanner() { //Deklarerar en variabel som heter name String name; //Skriver ut en uppmaning till användaren System.out.println("Skriva ÖKA om du vill öka antal " + "personer, skriv SÄNK om du vill minska antal personer"); //Scanner tar in värdet från användaren Scanner input = new Scanner(System.in); //Värdet sparas i variabeln name name = input.nextLine(); //Metoden returnerar variabeln name return name; }
Vi kombinerar nu alla metoderna för att skapa hela programmet:
//Importerar klassen scanner import java.util.Scanner; public class Counter { //Skapar variabeln nmbrOfPeople public static int nmbrOfPeople = 0; //Metod för att öka variabeln nmbrOfPeople med ett public static void increaseValue(){ nmbrOfPeople++; } //Metod för att minska variabeln nmbrOfPeople med ett public static void decreaseValue(){ nmbrOfPeople--; } //Metod för att returnera värdet på nmbrOfPeople public static int getNmbrOfPeople(){ return nmbrOfPeople; } public static String getInputsFromScanner() { String name; System.out.println("Skriva ÖKA om du vill öka antal " + "personer, skriv SÄNK om du vill minska antal personer" + ", eller skriv QUIT om du vill avsluta"); Scanner input = new Scanner(System.in); name = input.nextLine(); return name; } public static void main(String args[]) { //Boolean variabel för att styra loopen boolean runProg = true; //Loopen körs medan runProg är true while(runProg) { //Metoden getInputsFromScanner returnerar värdet på //det användaren skriver in och sparar detta i str String str = getInputsFromScanner(); //Om användaren skrev "ÖKA" så ska metoden increaseValue köras if (str.equals("ÖKA")) { increaseValue(); } //Om användaren skrev "SÄNK" så ska metoden decreaseValue köras else if (str.equals("SÄNK")){ decreaseValue(); } //Om användaren angav "QUIT" så ska loopen avslutas else if(str.equals("QUIT")){ System.out.println("Programmet avslutas"); runProg = false; } //Om användaren angav felaktig input else{ System.out.println("Felaktig input, försök igen"); } //Slutligen skriver vi ut antal personer i butiken System.out.println("Antal personer är nu: " + getNmbrOfPeople()); } } }
Vidare, exemplet ovan kommer då att se ut såhär:
Avslutningsvis, vi har alltså använt oss av flera olika metoder för att skapa ett fullt program. Små byggstenar skapar tillsammans stora program! Gör därför dina metoder så generella och användbara som möjligt så att du kan återanvända dem så många gånger som möjligt. Det är så vi skapar effektiv kod!
Det här blir ett lite längre exempel som vi kommer ta steg för steg. Vi ska nu skapa ett räkneexempel med metoder, där vi kan se hur vi kan återanvända metoder för flera användningsområden. Vi ska med hjälp av metoder skriva ett program som räknar ut volymen på en kon och en pyramid. Programmet ska sedan avgöra vilken av konen eller pyramiden som har störst volym. Vi kommer använda JOptionPane för att skapa dialogrutor som ska interagera med användaren och ta in uppgifter och sedan presentera resultatet av beräkningarna.
Innan vi börjar, vi rekommenderar att du följer händelseförloppet i koden i lugn takt och ta tid på dig för att verkligen följa med på vad som händer.
Volymen på en kon beräknar man med formeln:
Basytan (B) multiplicerat med höjden (h) och sedan divideras det med 3. Basytan beräknas som radien (r) upphöjt till 2, multiplicerat med med Pi, alltså arean för cirkeln konen bildar.
Volymen på en pyramid beräknar man med formeln:
Där basytan (B) multipliceras med höjden (h). Basytan (B) beräknar man med längden (L) multiplicerat med bredden (b), alltså längden på triangeln som bildas, multiplicerat med bredden på triangeln.
Vi börjar med att skapa en metod, areaCircle, som räknar ut arean på en cirkel, alltså basytan på konen. Metoden tar in en double som parameter och ska även returnera en double.
public static double areaCircle(double radius) { // Beräknar arean av en cirkel double area = radius*radius*Math.PI; return area; }
På liknande sätt skapar vi en metod, areaPyramid, som beräknar basarean för pyramiden. Notera att areaPyramid tar in två parametrar av typen double, samt att även denna metod returnerar en double
public static double areaPyramid(double length, double width ) { // Beräknar arean och sparar värdet i areaTriangle double areaTriangle = length*width; return areaTriangle; }
Eftersom formeln för att räkna ut volymen är densamma för både konen och pyramiden, innebär det att vi kan använda samma metod i båda fallen. Vi skapar en metod som heter volume som även den tar in två värden, area och height, och returnerar sedan en variabel av datatyp double.
public static double volume(double area, double height) { // Beräknar volymen double volume = area * height; return volume; }
Vidare, nu ska vi jämföra vilken av volymerna som är störst och vi skapar då en passande metod som hjälper oss med detta, largestVolume. Notera att denna metod returnerar en String
public static String largestVolume(double volumeCone, double volumePyramid){ // Kollar om konens volym är större än pyramidens if(volumeCone > volumePyramid){ return "Konen har störst volym!"; } // Kollar om konens volym är mindre än pyramidens else if(volumeCone < volumePyramid){ return "Pyramiden har störst volym"; } // Om varken konen är större eller mindre än pyramiden //måste volymerna vara lika stora! else{ return "Volymerna är lika stora!"; } }
Sedan skapar vi en metod som tar in längden och höjden på pyramiden och konen med hjälp av klassen JOptionPane. Metoden heter getInputsFromJOptionPane och ska inte returnera något värde (void) och metoden ska heller inte få in något värde.
public static void getInputsFromJOptionPane() { // Sparar undan det värdet som användaren skriver in i ett dialogfönster. // Double.parseDouble finns för att värdet som skrivs in ska vara en double double radiusCone = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in radien på konen")); double heightCone = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in höjden på konen")); double lengthPyramid = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in längden på pyramidens bas")); double widthPyramid = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in bredden på pyramidens bas")); double heightPyramid = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in höjden på pyramiden")); // Använder metoden areaCircle för att beräkna arean. Skickar in värdet på radiusCone. // Värdet som kommer ut ur metoden sparas i areaOfCone double areaOfCone = areaCircle(radiusCone); // Använder metoden volume för att beräkna volymen av konen. Skickar in värdet på areaOfCone och heightCone. // Värdet som kommer ut ur metoden sparas i volumeCone double volumeCone = volume(areaOfCone, heightCone); // Använder metoden areaPyramid för att beräkna arean. Skickar in värdet på lengthPyramid och widthPyramid. // Värdet som kommer ut ur metoden sparas i areaOfPyramid double areaOfPyramid = areaPyramid(lengthPyramid, widthPyramid); // Använder metoden volume för att beräkna volymen av pyramiden. Skickar in värdet på areaOfPyramid och heightPyramid. double volumePyramid = volume(areaOfPyramid, heightPyramid); // Kollar vilken volym som är störst med hjälp av metoden largestVolyme. String largestVolume = largestVolume(volumeCone, volumePyramid); // Skriver ut det största värdet i en dialogruta JOptionPane.showMessageDialog(null, largestVolume); }
Avslutningsvis, om vi sammanfogar koden från alla tidigare steg med förklarande kommentarer så får vi.
//Importerar klassen JOptionPane import javax.swing.JOptionPane; public class Volume { public static void main(String args[]) { //Det är här koden startar. Metoden getInputsFromJOptionPane utförs först getInputsFromJOptionPane(); } public static double areaCircle(double radius) { // Beräknar arean av en cirkel double area = radius*radius*Math.PI; return area; } public static double areaPyramid(double length, double width ) { // Beräknar arean och sparar värdet i areaTriangle double areaTriangle = length*width; return areaTriangle; } public static double volume(double area, double height) { // Beräknar volymen double volume = area * height; return volume; } public static String largestVolume(double volumeCone, double volumePyramid){ // Kollar om konens volym är större än pyramidens if(volumeCone > volumePyramid){ return "Konen har störst volym!"; } // Kollar om konens volym är mindre än pyramidens else if(volumeCone < volumePyramid){ return "Pyramiden har störst volym"; } // Om varken konen är större eller mindre än pyramiden //måste volymerna vara lika stora! else{ return "Volymerna är lika stora!"; } } public static void getInputsFromJOptionPane() { // Sparar undan det värdet som användaren skriver in i ett dialogfönster. // Double.parseDouble finns för att värdet som skrivs in ska vara en double double radiusCone = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in radien på konen")); double heightCone = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in höjden på konen")); double lengthPyramid = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in längden på pyramidens bas")); double widthPyramid = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in bredden på pyramidens bas")); double heightPyramid = Double.parseDouble(JOptionPane.showInputDialog(null, "Skriv in höjden på pyramiden")); // Använder metoden areaCircle för att beräkna arean. Skickar in värdet på radiusCone. // Värdet som kommer ut ur metoden sparas i areaOfCone double areaOfCone = areaCircle(radiusCone); // Använder metoden volume för att beräkna volymen av konen. Skickar in värdet på areaOfCone och heightCone // Värdet som kommer ut ur metoden sparas i volumeCone double volumeCone = volume(areaOfCone, heightCone); // Använder metoden areaPyramid för att beräkna arean. Skickar in värdet på lengthPyramid och widthPyramid // Värdet som kommer ut ur metoden sparas i areaOfPyramid double areaOfPyramid = areaPyramid(lengthPyramid, widthPyramid); // Använder metoden volume för att beräkna volymen av pyramiden. Skickar in värdet på areaOfPyramid och heightPyramid. double volumePyramid = volume(areaOfPyramid, heightPyramid); // Kollar vilken volym som är störst med hjälp av metoden largestVolyme. String largestVolume = largestVolume(volumeCone, volumePyramid); // Skriver ut det största värdet i en dialogruta JOptionPane.showMessageDialog(null, largestVolume); } }
Följande är några enklare misstag som vi uppmärksammat
När man vill använda en tidigare skapad metod så säger man att man anropar man den metoden. För att anropa metoden så anger man metodens namn följt av eventuella inparametrar inom parantes. När en parameter skickas till metoden kallas den för ett argument och när du arbetar med flera argument måste metodanropet ha samma antal argument som det finns parametrar och argumenten måste skickas i samma ordning. Avslutningsvis, om den anropade metoden returnerar ett värde, kan man tilldela detta till en variabel av samma datatyp.
Genom att ange metodens namn följt av metodens argument inom parantes.
Det är de inparametrar som metoden använder. När vi skickar en parameter till metoden kallas den för ett argument. Om du har flera argument måste metodanropet ha samma antal argument som det finns parametrar och argumenten måste skickas i samma ordning.
Ja det gå bra. I Java kan metoder anropa sig själv, detta kallas rekursion och är ett effektivt sätt att arbeta med metoder. Rekursion är en process där en metod kallar sig själv, direkt eller indirekt, och den motsvarande funktionen kallas för en rekursiv funktion.
Vad tyckte du om sidan?
Lämna gärna feedback och hjälp oss göra sidan bättre
Feedback gör oss bättre!
Lämna gärna feedback om vad du tyckte om avsnittet!