Arrayer. results

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

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

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

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.

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

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.

F7 - Arrayer. ID1004 Objektorienterad programmering Fredrik Kilander

Föreläsning 2, vecka 8: Repetition

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

DAT043 - föreläsning 8

OOP Objekt-orienterad programmering

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

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.

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

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

Sammansatta datatyper Generics: Parametrisk polymorfism

Objektorienterad programmering i Java

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

Abstrakta datatyper. Primitiva vektorer. Deklarera en vektor

Generisk klass med typparameter Inre klass - ListIterator

Laboration A Objektsamlingar

Laboration 13, Arrayer och objekt

Kopiering av objekt i Java

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

(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

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

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

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 )

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

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

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

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

Typkonvertering. Java versus C

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

Länkade strukturer. (del 2)

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

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

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

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

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

Objektorienterad programmering med Java, Generics

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

Föreläsning REPETITION & EXTENTA

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

Metoder - en funktion: medel

Instuderingsfrågor, del E

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

Föreläsning 2 Innehåll

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

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

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

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

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

Tentamen Objekt-orienterad programmering i Java, 5p distanskurs

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

Arrayer (fält)

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

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

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

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

Lektion 7. Datateknik A, Java I, 5 poäng

Classes och Interfaces, Objects och References, Initialization

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

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

Föreläsning 3. Stack

Parameteröverföring. Exempel. Exempel. Metodkropp

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

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

Java Collections Framework. Föreläsning 2 Innehåll. Java Collections Framework interface hierarki. Java Collections Framework interface hierarki

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

Classes och Interfaces, Objects och References Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2016

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

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

Samlingar Collection classes

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

JAVAUTVECKLING LEKTION 8

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

Programmering för språkteknologer II, HT2011. Rum

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

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

Föreläsning 2 Innehåll. Generiska klasser. Generik i Java. Varför generiska klasser Bakgrund

DAT043 Objektorienterad Programmering

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

Del A (obligatorisk för alla)

Introduktion till Java

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

Föreläsning Innehåll. Hantera många element. Exempel: polygon Godtyckligt antal element. Exempel: polygon forts

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Länkade strukturer, parametriserade typer och undantag

UML. Översikt UML. Relationer mellan klasser. A är ett aggregerat av B:n. Kontor aggregat av Enheter. 12 olika diagramtyper, bl.a.

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

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

Transkript:

Arrayer 85

Arrayer Deklarerar utrymme för många variabler i en enda deklaration Array (fält) Varje värde har ett numeriskt index i Java indexeras en array med N element med indexen till N-1 Exempel: 1 2 3 4 5 6 7 8 9 results 79 87 94 82 67 98 87 81 74 91 86

Arrayer Alla värden har samma datatyp Får vara primitiva datatyper eller klasstyper I Java behandlas arrayer 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. Referenserna sätts till null vid skapandet. 87

Arrayer och hakparanteser Deklaration typename[] arrayname; (Observera att antalet värden ej ingår i typen vilket det delvis gör i C) Instansiering arrayname = new typename[numberofelements]; numberofelements godtyckligt uttryck av typ int Åtkomst av element arrayname[index] // index >= && index < numberofelements indexerar man sig utanför godkända index inträffar ett undantag (mer om dessa senare) 88

Exempel int[] results; results = new int[1]; //..9 int i = 1; char[] koder = new char[i]; Triangle triangles[]=new Triangle[i+123]; 89

Arrayer som datatyp Arrayer är en datatyp För varje datatyp finns en motsvarande arraydatatyp Typen är typename[] Storleken ingår inte i datatypen Grundtypen bestämmer kompatibiliteten Även fält referenser är polymorfa 9

Fler exempel int[] results1 = new int[1]; int[] results2 = new int[2]; results1 = results2; results2 = results1; OK, då samma datatyp 91

Primitiva datatyper int[] array; Instansiera arrayer Klasstyper Triangle[] tarray; array tarray array = new int[3]; tarray = new Triangle[3]; array 1 tarray null 1 2 null 2 3 null 3 array[1] = 2; array 1 tarray[1] = new Triangle(); tarray null 1 2 2 2 3 92 null 3

Instansiera arrayer Glöm inte att instansiera arrayen före användningen int[] results; results[] = 99; 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 93

Initialisera med listor Hela fältet kan initialiseras vid deklarationen int[] enheter = {147, 323, 89, 933, 54, 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 94

Indexkontroll Väl skapat är arrayens storlek fix Index måste referera till existerande element Index måste vara i intervallet storlek-1 Index kontrolleras dynamiskt (under körning) int[] array = {1, 2, 3, 4, 5}; int i; array 1 2 1 i = array[5]; ArrayIndexOutOfBoundsException: 5 95 3 4 5 2 3 4

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[] array = ; Off-by-one fel, eftersom index löper från till array.length-1 for (int i = 1; i <= array.length; i++) array[i] ; for (int i = ; i < array.length; i++) array[i] ; 96

Objekt som element Elementen i en array kan vara objektreferenser Circle[] cirkel = new Circle[5]; Fem referenser till objekt av typen Circle OBS! Inga objekt har skapats (referensen är null) cirkel[] = new Circle(); Objekten måste skapas separat t.ex. m.h.a. loop for (int i=;i < cirkel.length;i++) { cirkel[i] = new Circle(); cirkel[i].changesize((i+1)*1); } 97

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[] array = {1, 2, 3, 4, 5};.aMethod (array); array 1 public void amethod (int[] numbers) { numbers[2] = 99; } array[2] = ; numbers 2 3 99 4 1 2 3 5 4 98

Flerdimensionella arrayer Görs i java i form av array av array av... En-dimensionella arrayer motsvarar listor Två-dimensionella arrayer motsvarar tabeller eller matriser med rader & kolumner Varje dimension har ett eget index Varje array har har sin egen length dvs har vi en tvådimensionell array så har kolumnarrayen en lengt och varje rad sin Kan initialiseras med listor 99

Ännu fler exempel int[][] matrix1 = new int[1][2]; int[][] matrix2 = {{1}, {2, 22}, {3, 33, 333}, {4, 44, 444, 4444}} int[][][] matrix3 = new int[1][2][3]; matrix2[].length == 1; matrix2[3].length == 4; matrix1[2][3] = matrix2[1][]; matrix1[2] = matrix2[1]; matrix3[1] = matrix2; Triangle[][][][][] fivedimensional; 1

Kopiera arrayer Arrayvariabler är referenser Tilldelning gör ingen kopia på elementen i fältet int[] array1 = {1, 2, 3, 4, 5}; int[] array2 = new int[5]; array2 = array1; array1 1 array2 2 1 1 3 2 2 4 3 3 5 4 4 11

Kopiera arrayer 2 System.arraycopy gör kopia element för element Vid flerdimensionella arrayer måste den anropas flera gånger Gör lämpligtvis i en (nästad) loop public static void arraycopy ( Object source, int srcindex, Object dest, int destindex, int size) throws ArrayIndexOutOfBoundsException, ArrayStoreException Vi kan självklart göra det manuellt också 12

Klassen ArrayList (java.util) Ett objekt av klassen ArrayList liknar en array Men Har dynamisk längd, dvs längden utökas efter behov Lagrar bara referenser till objekt Inte samma syntax för indexering Implementeras med arrayer 13

Generics I tidigare versioner av Java kan man göra generella klasser (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 explicita typkonverteringar 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 14

ArrayList<T> ArrayList<T> ( ) + add(t obj) + add (int index, T obj) + set (int index, T obj) + remove (int index) + T get (int index) + boolean contains (T obj) + boolean isempty ( ) + int indexof (T obj) + int size ( ) + clear ( )... 15

Effektiviteten av ArrayList När ett element sätts in flyttas (kopieras) alla efterföljande element en position åt höger 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91... sätt in på index 4 När ett element tas bort flyttas (kopieras) alla efterföljande element en position åt vänster 1 2 3 4 5 6 7 8 9 79 87 94 82 67 98 87 81 74 91... Ej effektivt 16

Autoboxing Automatisk konvertering mellan primitiva typer och wrapperklasserna Integer, Float, Boolean etc Ex: Integer i = new Integer(9); Integer j = new Integer(13); 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(13)); mylist.add("hejsan svejsan"); int testint=((integer)mylist.get()). intvalue(); System.out.println(testInt); } } 18

Med generics och autoboxing import java.util.*; public class ArrayListTest{ public static void main(string[] args){ ArrayList<Integer> mylist = new ArrayList<Integer>(); mylist.add(13); mylist.add("hejsan svejsan"); // Blir kompileringsfel ovan nu!! int testint = mylist.get(); // OBS! (Integer) och.intvalue borta System.out.println(testInt); } } 19

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 =;i<1;i++) v.add(new Integer(i)); Iterator<Integer> it = v.iterator(); while(it.hasnext()) it.next() 11

For-each Ny variant på for-loopen. Tillkom i Java 1.5 (5) ArrayList<Integer> v=new ArrayList<Integer>(); for(int i =;i<1;i++) v.add(new Integer(i)); for(integer value:v) value Funkar för arrayer och alla klasser som implementerar interfacet Iterable 111