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

Relevanta dokument
Föreläsning 2, vecka 8: Repetition

Metoder - en funktion: medel

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 11: Rekursion

Föreläsning 3-4 Innehåll

Instuderingsfrågor, del D

TDDC77 Objektorienterad Programmering

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

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.

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

Typkonvertering. Java versus C

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Föreläsning 1, vecka 7: Rekursion

Objektorienterad Programmering (TDDC77)

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

Objekt och klasser - Introduktion

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

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

OOP Objekt-orienterad programmering

Funktionens deklaration

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

Objektorienterad programmering i Java

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

Föreläsning 9-10 Innehåll

OOP Objekt-orienterad programmering

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

Del A (obligatorisk för alla)

OOP Objekt-orienterad programmering

Tentamen , Introduktion till Java, dtaa98, dtea53

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

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

JAVAUTVECKLING LEKTION 8

LÖSNINGSFÖRSLAG TENTAMEN

TENTAMEN OOP

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

DELPROV 1 I DATAVETENSKAP

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

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

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

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

Lösningsförslag: Instuderingsfrågor, del D

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

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

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

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-17, TDA540. Dag: , Tid:

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

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

Instuderingsfrågor, del E

Föreläsning REPETITION & EXTENTA

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

[] Arrayer = Indexerad variabel

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

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

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

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

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

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

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

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

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:

Tentamen. Lösningsförslag

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

TENTAMEN OOP

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

Arrayer. results

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

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

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

Tentamen OOP

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

Laboration 13, Arrayer och objekt

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

Lösningar för tenta 3 DAT043,

Outline. Objektorienterad Programmering (TDDC77) Att instansiera en klass. Objekt. Instansiering. Åtkomst. Abstrakt datatyp.

Java, klasser, objekt (Skansholm: Kapitel 2)

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

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

Tentamen ID1004 Objektorienterad programmering December 15, 2012

Tentamen i Grundläggande Programvaruutveckling, TDA548

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

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

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Skriftlig tentamen för kursen DV017A. Inledande programmering i Java A

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Parallellism, återblick

Objektorienterad programmering i Java Undantag Sven-Olof Nyström Uppsala Universitet Skansholm: Kapitel 11

(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

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

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

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Objektorienterad Programmering (TDDC77)

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Omtentamen för TDA540 Objektorienterad Programmering. Institutionen för Datavetenskap CTH HT-16, TDA540. Dag: , Tid:

Institutionen för TENTAMEN CTH VT-15 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

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

Transkript:

TDA 545: Objektorienterad programmering Föreläsning 6: Metoder och fält (arrays) Magnus Myréen Chalmers, läsperiod 1, 2015-2016

I (föregående och) denna föreläsning Läsanvisning: kap 2 & 13 meddelanden och metoder informationsdöljande och inkapsling skapa och använda färdiga objekt! primitiva variabler kontra objektvariabler 3 tester på likhet metoder fält (arrays) Nästa föreläsning handlar om Att skriva egna klasser.

Metoder! Metoder = funktioner i Java Definition av en metod: public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel

Metoder! Metoder = funktioner i Java metodhuvud, funktionshuvud, signature Definition av en metod: public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel

Metoder! Metoder = funktioner i Java Definition av en metod: public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel metodens kropp

Metoder! Metoder = funktioner i Java modifierare modifierare Definition av en metod: public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel

Metoder! Metoder = funktioner i Java returvärdets typ Definition av en metod: public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel

Metoder! Metoder = funktioner i Java metodens namn Definition av en metod: public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel

Metoder! Metoder = funktioner i Java formell parametrar Definition av en metod: formell parametrar public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel

Metoder! Metoder = funktioner i Java Definition av en metod: public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel retur värdet

Metoder! Metoder = funktioner i Java returvärdets typ metodens namn modifierare modifierare formell parameter Definition av en metod: formell parameter public static double medel(int v1, int v2) { return (v1+v2)/2.0; // end medel retur värdet Metodens resultat kan vara av vilken typ som helst, även en klass. Anrop t.ex. int c = 52; int a = 10; double medel1, medel2; medel1 = medel(5, 10); medel2 = medel(a, c); aktuell parameter aktuell parameter

En klass med två metoder import java.util.scanner; public class EnkelMatematik { 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(System.in); double tal1, tal2, mv; System.out.println("Ange 2 tal"); tal1 = myinput.nextdouble(); tal2 = myinput.nextdouble(); mv = medel(tal1, tal2); System.out.print("Medelvärdet är: "); System.out.println(mv); // end main // end EnkelMatematik

Evaluering av metodanropet public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; mv = medel(tal1,tal2); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; mv = medel(tal1,tal2); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; mv = medel(tal1,tal2); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; mv = medel(25.0,tal2); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; mv = medel(25.0,tal2); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; de formella parametrarna är vanliga variabler för metoden utgångsvärdena får de från metodanropet. typ: double 25.0 namn: v1 typ: double 15.0 namn: v2 mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet return (v1 + v2)/2.0; typ: double 25.0 namn: v1 typ: double 15.0 namn: v2 mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet return (v1 + v2)/2.0; typ: double 25.0 namn: v1 typ: double 15.0 namn: v2 mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet return (v1 + v2)/2.0; typ: double 25.0 namn: v1 typ: double 15.0 namn: v2 mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet return (25.0 + 15.0)/2.0; typ: double 25.0 namn: v1 typ: double 15.0 namn: v2 mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet return (40.0)/2.0; typ: double 25.0 namn: v1 typ: double 15.0 namn: v2 mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet return 20.0; typ: double 25.0 namn: v1 typ: double 15.0 namn: v2 mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet return 20.0; mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet return 20.0; mv = 20.0; System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet mv = 20.0; System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet mv = 20.0; System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double 20.0 namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet System.out.print("Medelvärdet är: "); System.out.println(mv); typ: double 20.0 namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet System.out.println(mv); Utskrift: "Medelvärdet är: " typ: double 20.0 namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet System.out.println(mv); Utskrift: "Medelvärdet är: " typ: double 20.0 namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet System.out.println(20.0); Utskrift: "Medelvärdet är: " typ: double 20.0 namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Evaluering av metodanropet Koden har kört klart Utskrift: "Medelvärdet är: 20.0\n typ: double 20.0 namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Parameteröverföring public static double medel(double v1,double v2) { return (v1 + v2)/2.0; // end medel; de formella parametrarna är vanliga variabler för metoden utgångsvärdena får de från metodanropet. nya lokala variabler skapas typ: double 25.0 namn: v1 typ: double 15.0 namn: v2 mv = medel(25.0,15.0); System.out.print("Medelvärdet är: "); System.out.println(mv); I Java överförs alltid parametrarna via värdeanrop dvs värdet av den aktuella parametern kopieras över till den formella parametern. typ: double namn: mv typ: double 25.0 namn: tal1 typ: double 15.0 namn: tal2

Metoder = funktioner och procedurer Använd en funktion om du kan, en procedur om du måste. Funktioner beräknar värden. De utvidgar uttrycksdelen av språket. Ett funktionsanrop: är ett uttryck och har en returtyp (dvs inte void) beräknas till ett värde som returneras. mv = medel(tal1, tal2); Procedurer utför åtgärder. De utvidgar satsdelen av språket. Ett proceduranrop: är ett sats returnerar inget värde (returtyp = void) System.out.print("Störst är: ");

Synbarhet (Scope) En variabel/metod syns från det den deklareras tills dess att blocket den deklarerats i tar slut. int global = 4; if (<villkor>) { int local = 3; // här finns local och global... else { // här finns inte local // men global finns... static double sqr(double x){ double tmp = x*x; // här finns tmp och x return tmp; // 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) { return max(a,max(b,c)); public static double max(double a, double b) { if (a > b)...

Att vända på en sträng (igen!) Uppgift: Skriv en metod som vänder om en sträng. Exempel: Hello! bör bli!olleh Tips: Gör så här: str är "Hello!", result är "" str är "Hello!", result är "H" str är "Hello!", result är "eh" str är "Hello!", result är "leh" str är "Hello!", result är "lleh" str är "Hello!", result är "olleh" str är Hello!", result är!olleh"

Att vända på en sträng (igen!) Lösning: Tips: public static String rev(string str) { String result = ""; for (int i=0; i<str.length(); i++) { result = str.charat(i) + result; return result; Gör så här: str är "Hello!", result är "" str är "Hello!", result är "H" str är "Hello!", result är "eh" str är "Hello!", result är "leh" str är "Hello!", result är "lleh" str är "Hello!", result är "olleh" str är Hello!", result är!olleh"

Fält, vektorer, matriser, arrays ett fält = ett block av värden referensvärde 0 1 2 3 4 5 6 7 namn: temp temp[2] 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

Att skapa fält Deklarera ett fält med 8 heltal: int[] temp = new int[8]; eller deklaration och snabbtilldelning med array initializer int[] temp = {6,7,3,7,1,7,2,9; 0 1 2 3 4 5 6 7 referensvärde 6 7 3 7 1 7 2 9 Obs. sådan tilldelning fungerar endast i deklaration, detta går ej: temp = {6,7,3,7,1,7,2,9;

Tilldelning av fältvärden Innan: namn: temp referensvärde 0 1 2 3 4 5 6 7 6 7 3 7 1 7 2 9 Uppdatering av ett fältvärde: temp[1] = 8; Efter: namn: temp referensvärde 0 1 2 3 4 5 6 7 6 8 3 7 1 7 2 9

Tilldelning av fältvärden Innan: namn: temp referensvärde 0 1 2 3 4 5 6 7 6 7 3 7 1 7 2 9 Uppdatering av alla fältvärden: fältet längd, går ej att ändra for(int i = 0; i < temp.length; i++){ temp[i] = 2*temp[i]; Efter: namn: temp referensvärde 0 1 2 3 4 5 6 7 12 14 6 14 2 14 4 18

Läsning av fältvärden namn: temp referensvärde 0 1 2 3 4 5 6 7 6 7 3 7 1 7 2 temp[3] Läsning av ett fältvärde: int n = temp[3]; ändrar inte fältet n får värdet 7 något heltalsuttryck

Bearbeta fältets värden Antag: int[] temp = new temp[8]; Mycket vanligt mönster: for(int i = 0; i < temp.length; i++) { här: kod som bearbeta enskilda fältvärden med temp[i] t.ex. har tilldelning temp[i] = temp[i]

Vad gör denna loop? for (int i = 0; i < temp.length; i++) { temp[i] = 1; Den fyller fältet med ettor.

Vad gör denna loop? for (int i = 0; i < temp.length; i++) { temp[i] = temp[i] * 2; Den multiplicerar alla element med 2

Vad gör denna loop? int antal = 0; // i, j är vanliga namn på loop- index for (int i = 0; i < temp.length; i++) { if (temp[i] < 10) { antal = antal + 1; // Här innehåller antal antalet element <10 Den räknar hur många element < 10

Uppgift Summera innehållet i ett fält.

Fält och metoder Summera innehållet i ett fält: int sum = 0; for (int i = 0; i < arr.length; i++) { sum = sum + arr[i]; System.out.println(sum);

Fält och metoder Summera innehållet i ett fält i en metod: public static int sumarray(int[] arr) { int sum = 0; for (int i = 0; i < arr.length; i++) { sum = sum + arr[i]; return sum;

Fält och metoder Skapa fält genom att anropa en metod returtyp: ett fält skapar ett fält public static int[] fillarray(int size) { int[] tmp = new int[size]; for (int i = 0; i<tmp.length; i++) { tmp[i] = i; // eller nåt return tmp; returnerar det nya fältet Loopar som dessa ska ni kunna skriva i sömnen Öva! dvs programmera, programmera, programmera.

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 vad händer?

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 vad händer? Man 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; vad händer om metoden kör tilldelning av arr? och anrop hur fungerar parameteröverföringen? f2 = copyarray(f1);

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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);

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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);

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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); namn: f1 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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); namn: f1 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 namn: arr 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 namn: arr 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 namn: arr 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 namn: tmp namn: arr 0 1 2 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 namn: tmp namn: arr 0 1 2 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 namn: tmp namn: arr 0 1 2 1 5 3 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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( ); namn: f1 namn: tmp namn: arr 0 1 2 1 5 3 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) int[] f1 = {1,5,3,7,4,5,...; int[] f2 = null; int[] copyarray(int[] arr) { int[] tmp = new int[arr.length];... kopiera... return ; f2 = copyarray( ); namn: f1 namn: tmp namn: arr 0 1 2 1 5 3 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) int[] f1 = {1,5,3,7,4,5,...; int[] f2 = null; int[] copyarray(int[] arr) { int[] tmp = new int[arr.length];... kopiera... return ; f2 = copyarray( ); namn: f1 0 1 2 1 5 3 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) int[] f1 = {1,5,3,7,4,5,...; int[] f2 = null; int[] copyarray(int[] arr) { int[] tmp = new int[arr.length];... kopiera... return ; f2 = copyarray( ); namn: f1 0 1 2 1 5 3 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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 = ; namn: f1 0 1 2 1 5 3 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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 = ; namn: f1 0 1 2 1 5 3 0 1 2 1 5 3 namn: f2 null

Regeln var: Parameteröverföring Värdet av den aktuella parametern kopieras över till den formella parametern. i detta fall var är parametern ett referensvärde (dvs en pil) 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); namn: f1 0 1 2 1 5 3 0 1 2 1 5 3 namn: f2

Är fält objekt eller primitiva? Några skäl mot: annan syntax än andra objekt klassen har inget namn utan bildas genom ta 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 (har referensvärde) allokeras med new allokeras på heapen förälderklassen är Object och Object klassens metoder fungerar Så de ä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; // fungerar men...

Vanligaste felen med fält (fort.) array index out of bounds går ett steg för långt double sum = 0.0; for (i = 0; i <= f1.length; i++) { sum = sum + f1[i];

Vanligaste felen med fält (fort.) Man glömmer att kolla om indata är null static int firstelement(int[] arr) { return arr[0]; Bättre: static int firstelement(int[] arr) { if (arr == null) { throw new IllegalArgumentException("empty array"); else { return arr[0];

Vanligaste felen med fält (fort.) Man glömmer att kolla om indata är null static int firstelement(int[] arr) { return arr[0]; Ännu bättre: static int firstelement(int[] arr) { if (arr == null) { throw new IllegalArgumentException("empty array"); else if (arr.length < 1) { throw new IllegalArgumentException("empty array"); else { return arr[0];

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 ;

Uppgift Skriv kod som vänder om alla element i ett fält (dvs array). Före: 0 1 2 3 4 6 7 3 8 1 Efter: 0 1 2 3 4 1 8 3 7 6