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

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

Arrayer. results

Kodkonvention Klasser påbörjas med stor bokstav (i övrigt små utom om flera ord då Inledande bokstav i övriga ord också görs stor) AClass

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

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

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Vad gör vi idag? F8 Uppsamling/Repetition. Tentamen. Detta har vi gått igenom. Detta kommer vi att gå igenom. Detta har vi gått igenom.

EDAA20 Föreläsning Klassen ArrayList. Viktiga operationer på ArrayList. Generisk klass

Abstrakt datatyp. -Algoritmer och Datastrukturer- För utveckling av verksamhet, produkter och livskvalitet.

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

DAT043 - föreläsning 8

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

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

Föreläsning 2, vecka 8: Repetition

OOP Objekt-orienterad programmering

Kopiering av objekt i Java

Objektorienterad programmering i Java

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Föreläsning 2. Länkad lista och iterator

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Länkade strukturer. (del 2)

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

Instuderingsfrågor, del E

Dagens föreläsning. Arrayer och klasser. Medan ni väntar: Gå till m.voto.se/prog11 och svara på några gamla tentamensfrågor! (26 januari 2018 F3 1 )

Seminarium 3 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Föreläsning 10. ADT:er och datastrukturer

Subtyping och variance. Objekt-orienterad programmering och design Alex Gerdes, 2018

Laboration A Objektsamlingar

Föreläsning 2. Länkad lista och iterator

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

Sammansatta datatyper Generics: Parametrisk polymorfism

Saker du ska kunna Föreläsning 13 & 14

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

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

Föreläsning 3 Innehåll. Generiska klasser. Icke-generisk lista ArrayList, skiss av implementering. Icke-generisk lista Risk för fel

Föreläsning 1. Abstrakta datatyper, listor och effektivitet

Generisk klass med typparameter Inre klass - ListIterator

JAVAUTVECKLING LEKTION 8

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Länkade listor Stackar Köer MyList Iteratorer Lab 2 Exceptions Paket

Typkonvertering. Java versus C

Föreläsning REPETITION & EXTENTA

Föreläsning 2. Täcker material från lektion 1, 2, 3 och 4:

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

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

2203$( Föreläsning ii - Mer om Java bla this och konstruktorer. Exempel: lampa

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Datastrukturer. Arrayer. Arrayer. Arrayer. Array av arrayer. Array av arrayer

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

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

Del A (obligatorisk för alla)

Föreläsning 4 Innehåll. Abstrakta datatypen lista. Implementering av listor. Abstrakt datatypen lista. Abstrakt datatyp

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

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

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

(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

Föreläsning 3. Stack

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

TDDC30 Programmering i Java, Datastrukturer och Algoritmer Lektion 2. Laboration 2 Datastrukturer En liten uppgift Frågor

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

DAT043 Objektorienterad Programmering

Seminarium 2 Introduktion till Java Collections Framework Innehåll. Generik Bakgrund. Exempel på en generisk klass java.util.arraylist.

Tommy Färnqvist, IDA, Linköpings universitet

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

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

översiktskurs (5DV031)

Inkapsling tumregler. Åtkomstmodifikatorer, instantiering, referenser, identitet och ekvivalens, samt klassvariabler. public och private

Den som bara har en hammare tror att alla problem är spikar

Introduktion till Java

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

Laboration 13, Arrayer och objekt

TDDC77 Objektorienterad Programmering

Samlingar Collection classes

Metoder - en funktion: medel

Föreläsning 2 Innehåll

Föreläsning 3: Abstrakta datastrukturer, kö, stack, lista

TDDD78 Viktiga begrepp, del 2

Arrayer (vektorer) Murach s: kap Elektronikcentrum i Svängsta AB

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

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.

Innehåll. dynamisk bindning. och programmering CRC) u Arv, polymorfi och

Objektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.

Listor. Koffman & Wolfgang kapitel 2, avsnitt , och 2.9

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

Classes och Interfaces, Objects och References, Initialization

Subtyping, co- och contra-variance. Objekt-orienterad programmering och design Alex Gerdes, 2016

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 3 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Arrayer (fält)

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

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

Föreläsning 3-4 Innehåll

Objektorienterad programmering med Java, Generics

Tentamen. Programmeringsmetodik, KV: Java och OOP. 17 januari 2002

Objektorienterad Programkonstruktion. Föreläsning jan 2016

Transkript:

Ett problem Kontrollstrukturer och er Hur sparas data T ex när man vill spara resultaten av en tävling Exempel med 3 deltagare: public class Competition private int result1; private int result2; private int result3; Håller detta för 10, 100 eller ett okänt antal? Lösningen Deklarerar utrymme för många variabler i en enda deklaration!array (fält) En är en sekvens (ordnad lista) av värden Varje värde har ett numeriskt index Nelement indexeras med 0 till N-1 Exempel: 0 1 2 3 4 5 6 7 8 9 results 79 87 94 82 67 98 87 81 74 91 Arrayer Alla värden har samma datatyp Får vara primitiva datatyper eller klasstyper I Java behandlas er som objekt!instansieras med new!namnet på fältet är en referens!index är av datatyp int OBS! Vid instansiering av ett fält med objekt instansieras ej objekten. Det skapas bara utrymmet för rätt antal referenser. Arrayer och hakparanteser Deklaration typename[] Name; Instansiering Name = new typename[numberofelements]; numberofelements godtyckligt uttryck av typ int Åtkomst av element Name[index] // index >= 0 && index < numberofelements indexerar man sig utanför godkända index inträffar ett undantag (programmet avslutas om vi inte aktivt undviker detta) Exempel int[] results; results = new int[10]; // 0..9 int i = 1000; char[] koder = new char[i]; Triangle triangles[]=new Triangle[i+123]; 1

Arrayer som datatyp Arrayer är en datatyp För varje datatyp finns en motsvarande datatyp Typen är typename[] Storleken ingår inte i datatypen!grundtypen bestämmer kompatibiliteten!även fält referenser är polymorfa Fler exempel int[] results1 = new int[100]; int[] results2 = new int[20]; results1 = results2; results2 = results1; OK, då samma datatyp Primitiva datatyper int[] ; = new int[3]; Instansiera er Klasstyper Triangle[] ; = new Triangle[3]; Instansiera er Glöm inte att instansiera en före användningen int[] results; results[0] = 99; [1] = 20; [1] = new Triangle();! NullPointerException ett undantag, dessa kan bevakas och fångas upp för att hanteras, vilket vi kommer titta på på en senare föreläsning Initialisera med listor Hela fältet kan initialiseras vid deklarationen int[] enheter = 147, 323, 89, 933, 540, 269, 97; char[] kursniva = 'A', 'B', 'C', 'D'; Längden bestäms av antalet element Endast vid deklarationen Observera: new används inte Ingen explicit storlek Väl skapat är ens storlek fix Index måste referera till existerande element!index måste vara i intervallet 0storlek-1 Index kontrolleras dynamiskt (under körning) int[] = 10, 20, 30, 40, 50; int i; i = [5]; Indexkontroll! ArrayIndexOutOfBoundsException: 5 2

Arrayers storlek Varje Array objekt har ett publikt attribut length som anger antalet element, inte högsta index OBS! Leder ofta till off-by-one fel Används ofta i loopar Exempel: int[] = ; for (int i = 1; i <=.length; i++) [i] ; for (int i = 0; i <.length; i++) [i] ; Off-by-one fel, eftersom index löper från 0 till.length-1 Objekt som element Elementen i en kan vara objektreferenser Circle[] cirkel = new Circle[5];!Fem referenser till objekt av typen Circle OBS! Inga objekt har skapats (referensen är null) cirkel[0] = new Circle(); Objekten måste skapas separat t.ex. m.h.a. loop for (int i=0;i < cirkel.length;i++) cirkel[i] = new Circle(); cirkel[i].changesize((i+1)*10); Arrayer som parametrar Arrayreferensen överförs ( kopieras ) och den formella och aktuella parametern blir alias Ändringar påverkar båda Eftersom storleken inte är del av datatypen får den aktuella parametern ha godtycklig längd int[] = 10, 20, 30, 40, 50;.aMethod (); public void amethod (int[] numbers) numbers[2] = 99; [2] = 0; numbers Arrayer som parametrar: Object findobjectinarray(object o, Object[] OfObjects) int i; // local variable for (i = 0; i < OfObjects.length; i++) if (OfObjects[i] == o) // alias return o; return null; Exempel... public class GeoFigurer Circle[] cirkel = new Circle[5]; String[] farger = "red", "yellow", "blue", "green", "magenta", "black"; public GeoFigurer() for (int i=0;i < cirkel.length; i++) cirkel[i] = new Circle(); cirkel[i].changesize((i+1)*10); cirkel[i].movehorizontal((i+1)*25); for (int i=cirkel.length-1; i >=0 ; i--) cirkel[i].changecolor(farger[i]); // GeoFigurer Flerdimensionella er Arrayer kan ha flera dimensioner En-dimensionella er motsvarar listor Två-dimensionella er motsvarar tabeller eller matriser med rader & kolumner Array av av av...!varje dimension har ett eget index!varje dimension har sin egen length Kan initialiseras med listor 3

Ännu fler exempel int[][] matrix1 = new int[10][20]; int[][] matrix2 = 1, 2, 22, 3, 33, 333, 4, 44, 444, 4444 int[][][] matrix3 = new int[10][20][30]; matrix2[0].length == 1; matrix2[3].length == 4; Kopiera er Arrayvariabler är referenser!tilldelning gör ingen kopia på elementen i fältet int[] 1 = 10, 20, 30, 40, 50; int[] 2 = new int[5]; 2 = 1; 1 2 matrix1[2][3] = matrix2[1][0]; matrix1[2] = matrix2[1]; matrix3[1] = matrix2; Triangle[][][][][] fivedimensional; Kopiera er 2 System.copy gör kopia element för element Vid flerdimensionella er måste den anropas flera gånger Gör lämpligtvis i en (nästad) loop public static void copy ( Object source, int srcindex, Object dest, int destindex, int size) throws ArrayIndexOutOfBoundsException, ArrayStoreException Vi kan självklart göra det manuellt också Klassen ArrayList (java.util) Ett objekt av klassen ArrayList liknar en Men Har dynamisk längd, dvs längden utökas efter behov Lagrar bara referenser till objekt av typen Object Man får bara Object tillbaka Inte samma syntax för indexering Implementeras med er ArrayList ArrayList ArrayList ( ) + add(object obj) + add (int index, Object obj) + set (int index, Object obj) + remove (int index) + Object get (int index) + boolean contains (Object obj) + boolean isempty ( ) + int indexof (Object obj) + int size ( ) + clear ( )... Effektiviteten hos ArrayList När ett element sätts in flyttas (kopieras) alla efterföljande element en position åt höger 0 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91... sätt in 0 på index 4 0 1 2 3 4 5 6 7 8 9 79 87 94 82 0 67 98 87 81 74 91 När ett element tas bort flyttas (kopieras) alla efterföljande element en position åt vänster!ej effektivt... 4

Generics I tidigare versioner av Java kan man göra generellaklasser (tex ArrayList) med hjälp av Object. Fördel är att man behöver skriva koden till listan en enda gång och sen använda den oavsett vad som ska lagras. Nackdel är att man i en och samma lista kan lagra olika objekt huller om buller. (Först en bok, sen ett bibliotek följt av ett hus etc) En annan nackdel är att man behöver göra många typecasts i kod som använder sig av en klass som utnyttjar Object. Mha generics så kan man istället specificera (vid konstruktion av objektet) vad som ska lagras Autoboxing Automatisk konvertering mellan primitiva typer och wrapper-klasserna Integer, Float, Boolean etc Ex: Integer i = new Integer(9); Integer J = new Integer(18); Integer k = i + j; // Typfel I Java 1.4 I java sedan version 5 Kod kommer att infogas för att göra konverteringen så det kommer inte gå snabbare än om man gör det manuellt, men koden blir mindre plottrig Johan Eliasson Utan generics och autoboxing import java.util.*; public class ArrayListTest public static void main(string[] args) ArrayList mylist = new ArrayList(); mylist.add(new Integer(103)); mylist.add("hejsan svejsan"); int testint = ((Integer)myList.get(0)). intvalue(); System.out.println(testInt); Med generics och autoboxing import java.util.*; public class ArrayListTest public static void main(string[] args) ArrayList<Integer> mylist = new ArrayList<Integer>(); mylist.add(103); // Blir kompileringsfel nu!! mylist.add("hejsan svejsan"); // OBS! (Integer) och.intvalue borta int testint = mylist.get(0); System.out.println(testInt); Iteratorer Kan användas för att gå igenom samlingar av värden tex i Vector, ArrayList m.fl. Vector<Integer> v = new Vector<Integer>(); for (int i =0;i<10;i++) v.add(new Integer(i)); Iterator<Integer> it = v.iterator(); while(it.hasnext()) Integer value = it.next(); For-each Ny variant på for-loopen. Tillkom i Java 1.5 (5) ArrayList<Integer> v = new ArrayList<Integer>(); for (int i = 0; i < 10; i++) v.add(new Integer(i)); int sum = 0; for (Integer value : v) sum = sum + value; // Autoboxing till int sum = sum + value.intvalue(); // Ej autoboxing Funkar för er och alla klasser som implementerar interfacet Iterable 5