Funktioner. Programmering. Egendefinierade funktioner i Java. En Java-funktions anatomi. hh.se/db2004. Statiska metoder. Funktioner. resultatvärde.



Relevanta dokument
Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Input. Programmering. Andra källor

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Föreläsning 4: for, while, do-while

Vad är ett objekt? Tillstånd och beteende. Vad är ett objekt? Exempel

7 GRUNDERNA I PROGRAMMERING

Heltal(int) Programmeringsteknik 54

Roboten Karel lär sig Java

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 3

Föreläsning 5 Mer om funktioner, villkor

Laboration 12, Arrayer

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

PROV. 10 Uppräknade datatyper

Med denna aktivitet försöker jag

7. Inre energi, termodynamikens huvudsatser

Hur många registreringsskyltar finns det som inte innehåller samma tecken mer än en

For-sats/slinga. Notis

Möjlighet att leva som andra

Talmönster och algebra. TA

Bedömningar som främjar inkludering Riktlinjer och metoder

När man använder någon annans text

Introduktion till MATLAB

Tentamen Objektorienterad Programutveckling med C++

Att ta fram en tidsplan

Näsgård Mobile TID Manual senast ändrad Näsgård Mobile TID. Inloggning

Att svara på en remiss

Referentiell transparens. Programmeringsmetodik DV1 Programkonstruktion 1. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering

Konsten att skriva en projektplan

Provet består av Del I, Del II, Del III samt en muntlig del och ger totalt 75 poäng varav 28 E-, 23 C- och 24 A-poäng.

Hur länge ska fisken vara i dammen?

Transkript:

Programmering hh.se/db2004 Föreläsning 7: Funktioner Verónica Gaspes www2.hh.se/staff/vero www2.hh.se/staff/vero/programmering Funktioner Statiska metoder 1 Kan ta 0 eller flera argument. 2 Kan producera ett resultatvärde. 3 Kan ha sidoeffekt, till exempel skriva eller rita (mer generell än en funktion i matte.) Användning Både för att definiera matematiska funktioner (räkna ut en formel) och för att skriva modulära program. Center for Research on Embedded Systems IDE-sektionen 1 / 1 2 / 1 Egendefinierade funktioner i Java En Java-funktions anatomi 10 Input sum1to(n) = Σ n i=1 i Output 55 Summor private static long sum1to(int n){ for(int i = 1; i<=n; i++){ sum = sum + i; Headern (eller signaturen) private static long sum1to ( int n ) 1 resultattypen 2 metodnamn 3 argumenttypen 4 argumentvariabeln 3 / 1 4 / 1

En Java-funktions anatomi Styrflöde Kroppen 1 Lokala variabler 2 return-kommandot for(int i = 1; i<=n; i++){ sum = sum + i; Summor igen long x = 0; System.out.println("n 1+...+n"); System.out.println("-------------"); for(int k = 1; k<=n; k++){ x = sum1to(k) ; System.out.println(k+" "+x); Vad händer när man anropar funktionen? 5 / 1 6 / 1 Styrflöde När man anropar en funktion 1 Kontrollen förs över till funktionens kod. 2 Argumentvariabler tilldelas värdena som används i anropet. 3 Funktionens kod exekveras. 4 Returvärdet tilldelas istället för funktionen där man anropat den. 5 Kontrollen återgår till koden där anropet skedde. Detta kallas för pass by value. Räckvidd public class Sums { private static long sum1to(int n){ for(int i = 1; i<=n; i++){sum+=i; public static void main(string []cmdln){ long x = 0; for(int k = 1; k<=n; k++){ x = sum1to(k); System.out.println(k+" "+x); Räckvidd för ett namn: den delen av koden som kan använda namnet. Här kan man inte använda cmdln, N, x. Här kan man inte använda n, sum. 7 / 1 8 / 1

public class Cubes1{ int j = i*i*i; return j; public class Cubes2{ int i = i*i*i; 9 / 1 10 / 1 public class Cubes3{ i = i*i*i; public class Cubes4{ i = i*i*i; 11 / 1 12 / 1

public class Cubes5{ return i*i*i; Primtal private static long primenr (int n){... int n = Integer.parseInt(cmdLn[0]); System.out.println( primenr (n)); 13 / 1 14 / 1 private static boolean isprime (long n) {... private static long primenr(int n){ int count = 1; long i = 2; while(count<n){ i++; if( isprime (i)){count++;... 15 / 1 Slutligen private static boolean isprime(long n) { if (n < 2) return false; for (long i = 2; i*i <= n; i++) { if (n % i == 0) return false; return true; private static long primenr(int n){...... Observera användningen av return-kommandot: då avslutas exekvering av funktionens kod och kontrollen återgår till där funktionen anropades. 16 / 1

Fält som argument Fält som argument Hjälpfunktioner Om man vill skriva ut alla element i ett fält av heltal kan man tänka sig följande hjälpfunktioner: void printlnarray(int[] a) void printarray(int[] a) Observera returtypen void: Java kräver en returtyp hos en funktions signatur, men dessa funktioner producerar inget resultat, de bara har en sidoeffekt. Utskrift av fält private static void printlnarray(int[] a){ printarray(a); System.out.println(); private static void printarray(int[] a){ for(int i = 0; i < a.length; i++){ System.out.print(a[i]+" "); 17 / 1 18 / 1 Pascals triangel Fält som resultat Det är lätt att räkna nästa rad. Kuriosa 1 Summan av rad i är 2 i 2 Summan av 1 i finner man genom att följa andra diagonalen tills i och sedan titta ner och höger. 3 Om andra talet i en rad är primtal har alla tal i raden primtalet som faktor. 4 Rad i är koefficienterna för utvecklingen av (x + y) i Nästa rad i Pascals triangel private static long[] nextrow(long[] row){ long[] thenextrow = new long[row.length+1]; thenextrow[0] = 1; thenextrow[row.length] = 1; for(int i = 1; i < row.length; i++){ thenextrow[i] = row[i-1] + row[i]; return thenextrow; 19 / 1 20 / 1