34
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList

Föreläsning 4

  • Upload
    afya

  • View
    37

  • Download
    0

Embed Size (px)

DESCRIPTION

Föreläsning 4. Metoder & parametrar Array API och klassen ArrayList. Repetition. Styrstrukturer if While for do-while Metod deklaration och metodanrop. Metoder. - PowerPoint PPT Presentation

Citation preview

Page 1: Föreläsning 4

1

Föreläsning 4

• Metoder & parametrar

• Array

• API och klassen ArrayList

Page 2: Föreläsning 4

2

Repetition

• Styrstrukturer– if– While– for– do-while

• Metod deklaration och metodanrop

Page 3: Föreläsning 4

3

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.

Page 4: Föreläsning 4

4

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

Page 5: Föreläsning 4

5

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

Page 6: Föreläsning 4

6

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

Page 7: Föreläsning 4

7

main

Program

indata utdata

Page 8: Föreläsning 4

8

main

Program

m1() m2() m3()

indatautdata

Page 9: Föreläsning 4

9

Exempelimport java.io.*;class Person {

static BufferedReader stdin; public static void main(String[] args)throws IOException{

stdin = new BufferedReader(new InputStreamReader(System.in));

System.out.print(”Vad heter du?”);String namn = stdin.readLine();System.out.print(”Hur gammal är du?”);

String ålderStr = stdin.readLine();int ålder = Integer.parseInt(ålderStr);System.out.print(”vad har du för e-mail?”);String mailAdress = stdin.readLine();

int född = 2004 - ålder;System.out.println(namn+” är född år ”

+född+” kan nås via mail: ”+ mailAdress);}

}

Page 10: Föreläsning 4

10

Vilka delar i main upprepas flera gånger

……public static void main(String []args)throws IOException{

System.out.print(”Vad heter du?”);String 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 e-mail?”);String mailAdress = stdin.readLine();

int född = 2004 - ålder;System.out.println(namn+” är född år ”

+född+” kan nås via mail: ”+mailAdress);

}}

1

2

3

Page 11: Föreläsning 4

11

System.out.print(”Vad heter du?”);String namn = stdin.readLine();System.out.print(”Hur gammal är du?”);

String ålderStr =stdin.readLine();

System.out.print(”vad har du för e-mail?”);String mailAdress = stdin.readLine();

1

2

3

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.

På vilket sätt skiljer de sig med varandra?t.ex ”vad heter du”,”hur gammal är du” och ”vad har du för e-mail” är olika men alla är av sammatyp d.v.s. String.

Page 12: Föreläsning 4

12

static String läsSvar(String frågan){System.out.print(frågan);String svar = stdin.readLine();return svar;

}

Metoden kommer att se ut som nedan

Page 13: Föreläsning 4

13

Följande modell hjälper att skriva ihopen metod som vi önskar.

Metod

”vad heter du?”

”Hur gammal är du?”

”vad har du för e-mail?”

Det syns att metoden tar en strängar som indataoch returnerar den inlästa strängen som utdata

”vahid”

”18”

[email protected]

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.

Page 14: Föreläsning 4

14

Den nya klasskoden ser så här utimport java.io.*;class Person {

ststic BufferedReader stdin;public static void main(String[] args)throws IOException{ stdin = new BufferedReader(

new InputStreamReader(System.in)); String namn = läsSvar (”Vad heter du?”);

ålderStr = läsSvar(”Hur gammal är du?”); int ålder = Integer.parseInt(ålderStr); String mailAdress=läsSvar(”vad har du för e-mail?”);

int född = 2004 - å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.print(frågan);String svar = stdin.readLine();return svar;

}}

Page 15: Föreläsning 4

15

Parametrar• När en anropsparameter skickas med vid ett

metodanrop kopieras dess värde till den formella parametern.

• Kan ett metodanrop ändra på anropsparametern?– Om den är av primitiv datatyp: VÄRDET KAN INTE

ÄNDRAS

– Om den är en referens till ett objekt: VÄRDEN INUTI OBJEKTET KAN ÄNDRAS

– Om den är en referens till en sträng: STRÄNGEN KAN INTE ÄNDRAS (Sträng är undantag bland alla referens datatyper)

Page 16: Föreläsning 4

16

Typ konvertering (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.

Page 17: Föreläsning 4

17

Exempel

Skriv ett program som frågar efter radien för en cirkel och beräknar omkretsen och arean för cirkeln med hjälp av två metoder.

-utöka programmet sedan så att det frågar om man vill ange en ny radie varje gång, så att man kan beräkna flera gånger utan att programmet avslutas.

Page 18: Föreläsning 4

18

Fel

• Kompilerings fel

• Exekverings fel

• Logiskt fel

Page 19: Föreläsning 4

19

Logiskt fel

brudgumman

brud

Page 20: Föreläsning 4

20

Logiskt fel

brudgumman

brud

Page 21: Föreläsning 4

21

Referens datatyper

• Alla klasser som finns i API:n är referens datatyper

• Alla datatyper som inte är primitiva datatyper är referens datatyper.

• Man kan skapa objekt av referens datatyper men inte av primitiva datatyper

• En referns datatyp har både attribut och metoder men en primitiv datatyp är endast en minne för att lagra data.

Page 22: Föreläsning 4

22

API:n

• API står för Application Programming Interface.

• Är egentligen en samling av datatyper som underlättar programmeringen.

• Det finns en bra dokumentation på nätet där ska man leta efter klasser och metoder för att

Page 23: Föreläsning 4

23

Object

• Alla klasser i API:n och de klasser som vi definierar själva är en subbklass till klassen Object.

• Exempel: en Bil är en fordon, en cykel är en fordon, en flygplan är en fordon.

• En instans av klassen String är en instans av klassen Object, En instans av klassen Person är en instans av klassen Object men verken instans av person är String eller instans av String är Person.

Page 24: Föreläsning 4

24

Indexerade variabler

• Det förekommer ofta att programmeraren inte har någon aning om antal data som användaren kommer att använda som indata till programmet.

• Programmet ska inte behöva modifieras om användaren eller antal indata ändras.

• Därför finns det indexerade variabler som vi kallar de oftast vektorer.

Page 25: Föreläsning 4

25

Indexerade variabler

• Indexerade variabler använder sig av ett index.

• Det kan vara arrayer.

• Det kan vara klassen ArrayList eller Vector

Page 26: Föreläsning 4

26

Array (Hakvektor)

• Beteckningen [ ] betyder att vi har med en array att göra.

• I en variabel av typen String kan man bara lagra ett namn åt gången men i en variabeln av typen String[] (man läser String-array eller array av String) kan man lagra flera namn samtidigt. Hur?

Page 27: Föreläsning 4

27

Exempel

String kursbeteckning = ”prgmedcl”;

String[] kursBeteckningar =new String[3];

kursBeteckningar[0]=”prgmedcl”;

kursBeteckningar[1]=”Matema”;

kursBeteckningar[2]=”Elektr”;

Page 28: Föreläsning 4

28

Storlek av en array

Varje array har ett attribut som är av typen int och visar antal element i arrayen

String[] kursBeteckningar = new String[3];int storlek = kursBeteckningar.length;

OBS! blanda inte attributen length med metoden length() Som finns i klassen String

Page 29: Föreläsning 4

29

Metoden main och args

public static void main (String[] args){

}

Page 30: Föreläsning 4

30

Klassen ArrayList

• Klassen ArrayList finns i paketet java.util, därför detta paket ska importeras om man vill använda sig av klassen ArrayList.

• Klassen ArrayList har tre viktiga instansmetoder som används mest av allt.– boolean add(Object o)– Object get(int i)– int size( )– Object remove(int i)

Page 31: Föreläsning 4

31

Skapa ArrayList-objekt

ArrayList bilar = new ArrayList( );

Page 32: Föreläsning 4

32

Läggtill ett element i listan

bilar.add(”Volvo”);

Page 33: Föreläsning 4

33

Komma åt ett element i listan

• String minBil = (String) bilar.get(0);

• String pappasBil= (String) bilar.get(1);

Page 34: Föreläsning 4

34

Ta bort ett element

bilar.remove(1);