Metoder - en funktion: medel

Relevanta dokument
Föreläsning 6: Metoder och fält (arrays)

Föreläsning 2, vecka 8: Repetition

Föreläsning 8: Exempel och problemlösning

Lite om felhantering och Exceptions Mer om variabler och parametrar Fält (eng array) och klassen ArrayList.

Föreläsning 3-4 Innehåll

Föreläsning 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

Exempel. Arrayer. Lösningen. Ett problem. Arrayer och hakparanteser. Arrayer

Typkonvertering. Java versus C

Arrayer. results

Ett problem. Kontrollstrukturer och arrayer. Arrayer. Lösningen. Arrayer och hakparanteser. Exempel int[] results; results = new int[10]; // 0..

JAVAUTVECKLING LEKTION 8

Funktionens deklaration

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Föreläsning 1, vecka 8: Att förbereda sig för tentan

Exempel på listor (klassen ArrayList). Ett exempel med fält. Avbildning är en speciell typ av lista HashMap.

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

Objektorienterad programmering i Java

LÖSNINGSFÖRSLAG Programmeringsteknik För Ing. - Java, 5p

Föreläsning REPETITION & EXTENTA

Objektorienterad programmering. Fält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Föreläsning 8 Programmeringsteknik och Matlab 2D1312/2D1305. Klass Object, instans av klass public/private Klassvariabler och klassmetoder

Kapitel 6. Hakparenteser fšr att ange index MŒnga všrden av samma typ

Instuderingsfrågor, del D

Det finns en referensbok (Java) hos tentavakten som du får gå fram och läsa men inte ta tillbaka till bänken.

TDDC77 Objektorienterad Programmering

Laboration 13, Arrayer och objekt

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

Tentamen OOP

Objekt och klasser - Introduktion

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Uppgift: Algoritm för att beräkna kontrollsiffran i ett personnummer givet de 9 första siffrorna. Torrsimning av algoritm för personnummer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

Föreläsning 9-10 Innehåll

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Java, klasser, objekt (Skansholm: Kapitel 2)

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Kapitel 6. Kapitel 6. Hakparenteser fšr att ange index float[] priser = new float[500]; frekvens[4] boolean[] flaggor;

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

Instuderingsfrågor, del E

Dagens text. Programmeringsteknik. Mer om Scanner-klassen. Dialogrutor (klassen JOptionPane) Bubbelsortering. Omslagsklasser.

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Del A (obligatorisk för alla)

LÖSNINGSFÖRSLAG TENTAMEN

Objektorienterad Programmering (TDDC77)

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

Föreläsning 3: Booleans, if, switch

Grundkurs i programmering, 6 hp (725G61) Dugga 2 tillfälle 2

TENTAMEN OOP

OOP Objekt-orienterad programmering

Klassdeklaration. Metoddeklaration. Parameteröverföring

Arrayer (fält)

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Dagens program. Programmeringsteknik och Matlab. Objektorienterad programmering. Vad är vitsen med att ha både metoder och data i objekten?

Föreläsning 8 - del 2: Objektorienterad programmering - avancerat

Det finns en referensbok (Java) hos vakten som du får gå fram och läsa men inte ta tillbaka till bänken.

Anmälningskod: Lägg uppgifterna i ordning. Skriv uppgiftsnummer (gäller B-delen) och din kod överst i högra hörnet på alla papper

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

TDIU01 - Programmering i C++, grundkurs

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Datastrukturer. föreläsning 3. Stacks 1

DELPROV 1 I DATAVETENSKAP

Föreläsning 4. Klass. Klassdeklaration. Klasser Och Objekt

Dagens föreläsning. Sett i datorsalarna. Mer om arrayer. Matriser. Formatering av utskrifter. Inläsning med hjälp av Scanner-klassen

[] Arrayer = Indexerad variabel

Tentamen , Introduktion till Java, dtaa98, dtea53

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

Datatyper. Programmering. Att definiera datatyper i Java. Laddade partiklar. (x,y) (Rx,Ry) hh.se/db2004

Tentamen. Lösningsförslag

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Checklista. Föreläsning 1-2 Innehåll. Programmering.

Att skriva till och läsa från terminalfönstret

Lösningsförslag till tentamen för TDA540 Objektorienterad Programmering

Laboration 3, uppgift En klass för en räknare

for-satsen Fält for-satsen Föreläsning 8 (OH-bilder 7) for-satsen for-sats är en styrsats för iterationer. for-sats har följande generella utseende:

Högskolan Dalarna sid 1 av 7 DI-institutionen Hans-Edy Mårtensson Sten Sundin

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Parameteröverföring. Exempel. Exempel. Metodkropp

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Innehåll. Pekare Exempel

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Parallellism, återblick

OOP Tenta

Lösningar för tenta 3 DAT043,

Agenda. Arrayer deklaration, åtkomst Makron Flerdimensionella arrayer Initiering Strängar Funktioner och arrayer. Övningar nu och då

TENTAMEN OOP

public och private Obs: private inte skyddar mot access från andra objekt i samma klass.

Objekt och klasser - Introduktion. Objekt. SparKonto.java 2. SparKonto.java 1. Konton.java. Ett objekt har: Ett bankkonto

OOP Objekt-orienterad programmering

Transkript:

itop Läsanvisning: kap 2+13 F5 Metoder - en funktion: medel metodhuvud, funktionshuvud, signatur modifierare formella resultatvärdets typ parametrar metodens namn! Metoder, parameteröverföring! Fält Nästa gång: Nästa föreläsning (F6) handlar om ett exempel där vi använder det vi lärt oss hittills och ser på att att tolka felutskrifter från kompilatorn. Grupp B, C kan antagligen skippa nästa föreläsning. public static double medel(int v1, int v2){ return (v1+v2)/2.0; // end medel metodkropp metodens resultat metodens resultat kan vara av vilken typ som helst, även en klass. Anrop tex: int c = 52; int a = 10; double medel1, medel2; medel1 = medel(5, 10); medel2 = medel(a, c); aktuella parametrar F5 1 F5 2 Ett program med metoder import java.util.scanner; public class EnkelMatematik1 { Antag inmatning av 2.0 och 3.0 ovan public static double medel(double v1,double v2){ return (v1 + v2)/2.0; // end medel; //--------------------- public static void main(string[] args){ Scanner myinput = new Scanner...; double tal1, tal2, mv; System.out.println("Ange 2 tal"); tal1 = myinput.nextdouble(); tal2 = myinput.nextdouble(); S...print("Medelvärdet är: "); S...println(mv); // alternativ till 3 sista raderna S...print("Medelv igen är: "); S...println(medel(tal1, tal2)); <=> mv = medel(2.0, 3.0)); <=> mv = 2.5; 2.0 3.0 <=> mv = 2.5; medel // end main // end EnkelMatematik F5 3 F5 4

Parameteröverföring I Java överförs alltid parametrarna via värdeanrop dvs värdet av den aktuella parametern kopieras över till den formella parametern. public static int sqr(int x) {... detaljer ointressanta int tal = 5; int resultat; resultat = sqr(tal); aktuell parameter 5 tal 5 x formell parameter värdet av tal beräknas och kopieras till x tal och x är olika fysiska objekt Det spelar ingen roll om dom har samma namn, det är ändå två olika variabler: public int sqr(int tal) {... osv int tal = 5; int resultat; resultat = sqr(tal); Metoder=Funktioner och procedurer Använd en funktion om du kan en procedur om du måste Skall göra en sak bra. Funktioner beräknar värden. De utvidgar uttrycksdelen av språket. Ett funktionsanrop! är ett uttryck! och har en (retur)typ! void! beräknas till ett värde som returneras tal1 =...; tal2 =... Procedurer utför åtgärder De utvidgar satsdelen av språket Ett proceduranrop är en sats returnerar inget värde (returtyp = void) System.out.print("Störst är: "); F5 5 F5 6 Synbarhet (Scope) En variabel syns från det den deklareras tills dess att blocket den deklarerats i tar slut. int global = 4; if (<Villkor>) { int drömmoms = 3; // här finns drömmoms och global... else { // här finns inte drömmoms // men global finns... // här finns inte drömmoms // men global finns ------------------------------ static double sqr(double x){ double tmp = x*x; return tmp; // return x*x; // end sqr; // här finns inte tmp och inte x Overloading (Överlagring) Två eller flera metoder kan ha samma namn om dom skiljer sig åt i sina parametrar. public static int max (int a, int b) { if (a>b) { return a; else { return b; public static int max (int a, int b, int c) { if (a>b) {... public static double max (double a, double b) { if (a>b) {... F5 7 F5 8

Fält, vektorer, matriser, arrays! Har numrerade komponenter.! Komponenterna selekteras med index av diskret typ, indexeras från noll till length-1! Alla komponenter är av samma typ.! Komponenterna kan vara objekt. temp Skapa fält: Deklarera ett fält med 6 reella variabler: double[] temp = new double[6]; Deklaration och Snabbtilldelning int[] tmp = {0,1,2,3,4,5; med Array initializer Fungerar bara vid deklarationen dvs tmp ={0,1,2,3,4,5; GÅR INTE 0 1 2 3 4 5 temp[2] Tilldela och läsa fältvärden antag: int[] tmp = {0, 1, 2, 3, 4, 5; Tilldelning av *ett* fältvärde tmp[1] = 8; //{0,8,2,3,4,5 Tilldelning av *hela* fältet i en loop for(int i = 0; i<tmp.length; i++){ tmp[i] = 2*i; //{0,16,4,6,8,10 Läsa ett fältvärde int value = tmp[1]; // fältet ändras inte vid läsning Fältets längd = tmp.length (är ingen metod) Index kan vara ett (heltals-)uttryck Fältet initialiseras automatiskt till 0 Längden på ett fält kan inte ändras F5 9 F5 10 Bearbeta fältets värden antag: double[] tmp = new double[6]; Mönster: for(int i = 0; i < tmp.length; i++) { // bearbeta enskilda fältvärden här Fyll fältet med ettor for(int i = 0; i < tmp.length; i++) { tmp[i] = 1.0; Multiplicera alla element med 2 for (int i = 0; i < tmp.length; i++) { tmp[i] = tmp[i] * 2; Räkna alla element < 10 int antal = 0; // i, j är vanliga namn på loop-index for (int i = 0; i < tmp.length; i++) { if (tmp[i] < 10) { antal = antal +1; <- Här innehåller antal antalet element <10 F5 11 Fält och metoder Summera innehållet i ett fält double sum = 0.0; for (int i = 0; i < tmp.length; i++){ sum = sum + tmp[i]; System.out.println(sum); Summera innehållet i fältet i en metod ps... double sumarray(double[] arr) { double sum = 0.0; for (int i = 0; i<arr.length; i++){ sum = sum + arr[i]; return sum; Skapa fält genom att anropa en metod ps... double[] fillarray(int size) { double[] tmp = new double[size]; for (int i = 0; i<tmp.length; i++){ tmp[i] = i; // eller nåt return tmp; Tester på tomma fält utelämnade. Loopar som dessa måste man kunna skriva i sömnen! F5 12

Kopiera ett fält int[] f1 = {0,1,2,3,4,5; int[] f2 = new int[6]; f2 = f1; // blir INTE som du tänkt Du måste kopiera element för element: for (int i = 0; i<f1.length; i++){ f2[i] = f1[i]; Ofta gör man detta i en metod: static int[] copyarray(int[] arr) { int[] tmp = new int[arr.length]; for (int i=0; i<arr.length; i++){ --> tmp[i] = arr[i]; --> return tmp; Anrop f2 = copyarray(f1); Parameteröverföring igen: Vad händer om vi gör arr[i] = 5; inuti loopen? (Före resp. efter tilldelningen) F5 13 Parameteröverföring Regeln var: Värdet av den aktuella parametern kopieras över till den formella parametern. int[] f1 = {1,5,3,7,4,5,...; int[] f2 = null; int[] copyarray(int[] arr) { int[] tmp = new int[arr.length];...kopiera... return tmp; f2 = copyarray(f1); aktuell f1 17B27 lokal param. f2 1A23 formell param. arr 17B27 tmp 1A23 värdet av f1 beräknas och kopieras till arr f1 och arr pekar ut samma minnesplats Innehållet i arr kopieras till tmp tmp och f2 refererar till samma fysiska objekt tmp och arr tas bort, f1, f2 finns kvar F5 14 Är fält objekt eller primitiva Några skäl mot:! annan syntax än andra objekt! klassen har inget namn utan bildas genom att ta andra namn och lägga till []! du kan inte ärva fält! du kan inte definiera egna metoder och lägga till klassen! längden är en variabel, inte en funktion! Några saker som talar för att dom är det:! Språkdefinitionen säger att dom är det! fält är referenstyper! allokeras med new...! allokeras på heapen! förälderklassen är Object och Object klassens metoder fungerar Så dom är objekt, men lite speciella objekt. Vanligaste felen med fält null pointer exception int[] f1 = {0,1,2,3,4,5; int[] f2; for (i = 0; i < f1.length; i++){ f2[i] = f1[i]; Test.java:10: variable f2 might not have been initialized f2[i] = f1[i]; ^ 1 error f2 = f1; // funkar men... array index out of bounds double sum = 0.0; for (i = 0; i <= f1.length; i++){ sum = sum + f1[i]; F5 15 F5 16

Flerdimensionella fält (matriser) Är fält med fält som värden Raderna behöver inte vara lika långa int[][] m = new int[3][6]; for( int i=0; i< m.length; i++ ) { for( int j=0; j < m[i].length; j++ ) { m[i][j] = 0; 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 int[][] m2 = { {1, 2, 3, 4, 5, 6, {1, 1, 1, 1, {6, 5, 4, 3, 2, 1 ; En tentauppgift med lösning: Skriv en metod void columnsort(int[][] x) som givet en matris x sorterar varje kolumn. Skriv också en metod print(int[][] x) som skriver ut en matris. Skriv sedan kod som skapar första matrisen nedan, anropar columnsort och sedan print som då skriver den andra matrisen nedan. Exempel: om x är första 5x7 matrisen nedan så skall metoden columnsort arrangera matrisen som andra matrisen nedan. 12 6 7 17 18 19 8 0 14 8 15 5 3 2 7 2 1 6 9 18 21 1 5 9 3 7 11 2 89 12 6 1 0 19 27 ----------------------------------- 0 2 1 1 0 3 2 1 5 6 3 5 11 2 7 6 7 6 7 18 8 12 12 8 15 9 19 21 89 14 9 17 18 19 27 F5 17 F5 18 Talk is cheap. Show me the code. Linus Torvalds Struktur: public class ColumnSort { public static void print(int[][] x) {... public static void columnsort(int[][] x){... public static void main(string[] args) { columnsort(x); Vi bryr oss inte om att hantera tomma matriser i detta exempel men det bör man göra på tentan i både print och columnsort. F5 19 public static void main(string[] args) { int[][] x = {{12, 6, 7, 17, 18, 19, 8, 29, 2, { 0, 14, 8, 15, 5, 3, 2, 1, 18, { 7, 2, 1, 6, 9, 18, 21, 2, 8, { 1, 5, 9, 3, 7, 11, 2, 7, 10, {89, 12, 6, 1, 0, 19, 27, 21, 5 ; //System.out.println("Original array:"); //sort array columnsort(x); //System.out.println("Array Columns Sorted:\n"); 20

public static void columnsort(int[][] x){ // uses bubbelsort, largest to the end // for every column in matrix for(int col = 0; col < x[0].length; col++){ // for all numbers in array i.e. one column for (int i = 0; i < x.length-1; i++) { // bubble largest to the end of unsorted part for (int j = 0; j < x.length-1-i; j++) { if (x[j+1][col] < x[j][col]) { // swap int temp = x[j][col]; x[j][col] = x[j+1][col]; x[j+1][col] = temp; Hur hantera tomma fält i columnsort? if (x==null x[0]==null) { throw new IllegalArgumentException( empty array ); Ordlistan växer... metoder (funktioner, procedurer), parameteröverföring, metodhuvud, funktionshuvud, signatur, formell/aktuell parameter. uttrycksdel, satsdel, värdeanrop, synbarhet, scope, overloading, överlagring, Fält, vektorer, matriser, arrays, deklarera, index av diskret typ, initialisera, allokera, heapen, 23 24 Pseudokod för print: for varje rad loop for varje kolumn loop skriv x(rad, kolumn) + some space end loop radbyte end loop ------------------------------------------------ public static void print(int[][] x) { for(int i = 0; i < x.length; i++){ // varje rad for(int j = 0; j < x[i].length; j++){ // kolumn System.out.print(x[i][j] + "\t"); System.out.println(); System.out.println(); // kanske onödig sortera matrisen: for every column in matrix { sort it (med tex bubbelsort, störst till slutet) sortera en array: for all numbers in array { bubble largest to the end of unsorted part { if (x[j+1] < x[j]) { swap x[j+1] och x[j] (swap=byt plats på) eftersom vi sorterar en matris så måste vi ha ett index till tex if (x[j+1][col] < x[j][col]) {... 21 22