Tvådimensionella fält

Relevanta dokument
Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

Föreläsning 8 Flerdimensionella fält ArrayList enum switch-satsen

Föreläsning 8. Föreläsning 8 Flerdimensionella fält ArrayList enum. Flerdimensionella. ArrayList enum switch-satsen. switch-satsen

Föreläsning 8. Föreläsning 8 Flerdimensionella fält ArrayList enum. Flerdimensionella. ArrayList enum switch-satsen. switch-satsen

Föreläsning 8. Klassen String Mer om fält Klassen ArrayList

Flerdimensionella fält och textfiler

Objektorienterad programmering

Föreläsning 8. Föreläsning 8 Textfiler Flerdimensionella fält ArrayList enum switch-satsen

Föreläsning 8. Föreläsning 8

Föreläsning 7. Flerdimensionella fält ArrayList. Flerdimensionella. ArrayList. In- och utmatning av data

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

OOP Objekt-orienterad programmering

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

I ett program hantera man ofta samlingar av objekt av samma typ.

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

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

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

Föreläsning REPETITION & EXTENTA

Arrayer. results

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

Objektorienterad programmering i Java

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:

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

Tentamen OOP

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

Föreläsning 7. for-satsen Fält

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

Föreläsning 3. Iteration while-satsen

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

TENTAMEN OOP

Laboration 4: Digitala bilder

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

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

Del A (obligatorisk för alla)

Objektorienterad programmering

Föreläsning 6. Fält. Fält Klassen String. Fält

TENTAMEN OOP

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

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

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

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

2D1311 Programmeringsteknik för Bio1 och Bio2, vt 2003 Fiktivt prov På flervalsfrågorna är endast ett svar rätt om inget annat anges i frågan! Det rik

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

TENTAMEN OOP

Föreläsning 3-4 Innehåll

Enkla variabler kontra referensvariabel

Tommy Färnqvist, IDA, Linköpings universitet

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

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

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

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

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

Typkonvertering. Java versus C

Föreläsning 7. Fält Klassen String

DAT043 - föreläsning 8

Mer om klasser och objekt

Föreläsning 2 Innehåll

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

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

Arrayer (fält)

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

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

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

Programmering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.

Classes och Interfaces, Objects och References, Initialization

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

Fält och klassen String

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

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

Programmering A. Johan Eliasson

Klassen String Mer om fält Något om inläsning

public class BoundedCounter {

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

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

JAVAUTVECKLING LEKTION 8

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

Instuderingsfrågor, del E

Del A (obligatorisk för alla)

Introduktion till Java

PROV. 10 Uppräknade datatyper

Föreläsning 4 Innehåll

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

Tentamen DE12, IMIT12, SYST12, ITEK11 (även öppen för övriga)

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

TDDC77 Objektorienterad Programmering

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

Institutionen för TENTAMEN CTH HT-14 Datavetenskap TDA540. Tentamen för TDA540 Objektorienterad programmering

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

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

OOP Objekt-orienterad programmering

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

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

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

Idag. statiska metoder och variabler. private/public/protected. final, abstrakta klasser, gränssnitt, delegering. wrapper classes

Lösningsförslag övning 2.

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

Transkript:

Tvådimensionella fält Tvådimensionella fält är fält av fält. int[][] tabell = new int[][4]; tabell

Tvådimensionella fält Istället för att skapa ett tvådimensionellt fält med new kan fältet skapas genom att initiera värden till fältet vid deklarationen. int[][] tabell = {{, 4, 7, 9}, {5, 4,, 68}, {9,,, 4}}; 5 4 7 4 9 68 9 4 Eftersom ett tvådimensionellt fält är ett fält med referenser till ett endimensionellt fält, kan raderna vara olika långa int[][] tabell = {{, 4, 7, 9}, {5, 4, }, {9, }}; 5 9 4 7 4 9 Tvådimensionella fält int[][] tabell = {{, 4, 7, 9}, {5, 4, }, {9, }}; 5 9 4 7 4 9 tabell[].length ger 4 tabell[].length ger tabell[].length ger Arrays.sort(tabell[]) sorterar rad i tabell Arrays.sort(tabell[]) sorterar rad i tabell Arrays.sort(tabell[]) sorterar rad i tabell 4

Problemexempel Skriv ett program som läser in en NxN matris, samt avgör och skriver ut huruvida matrisen är symmetrisk eller inte. Matrisens gradtal ges som indata. För en symmetrisk matris A gäller att a ij = a ji för alla i och j Analys: Indata: Ett gradtal samt en kvadratiskt matris med detta gradtal. Utdata: Utskrift av huruvida den inlästa matrisen är symmetrisk eller inte. Exempel: Matrisen 4 4 5 ger utskriften MATRISEN ÄR SYMMETRISK, medan matrisen 4 5 5 6 7 ger utskriften MATRISEN ÄR INTE SYMMETRISK, medan matrisen 5 Design: Diskussion: När vi skall kontrollera om matrisen är symmetrisk utgår vi från att så är fallet. För att handha denna kunskap sätter vi en boolsk variabel, som vi kan kalla okey till värdet true. Sedan genomlöper vi matrisen och om vi då påträffar något element a ij för vilket det gäller att a ij a ji har vi en icke-symmetrisk matris. Detta kommer vi ihåg genom att sätta okey till värdet false. Algoritm:. Läs gradtalet n. Läs matrisen A. okey = true; 4. För varje element a ij i matrisen A 4.. if (a ij a ji ) okey = false; 5. if okey Skriv ut Matrisen är symmetrisk.. else Skriv ut Matrisen är INTE symmetrisk.. Datarepresentation: A är av datatypen double[][]. 6

Flerdimensionella fält Man kan ha ett godtyckligt antal dimensioner i ett fält, dvs man kan bilda fält av fält av fält av fält av... int[][][] cube = new int[][][4]; cube

Flerdimensionella fält En bild kan lagras som ett tvådimensionellt fält av bildpunkter (eller pixels). I en gråskalebild är varje bildpunkt ett heltal i intervallet [, 55], där betecknar svart och 55 betecknar vitt. I en färgbild utgörs varje bildpunkt av tre heltal i intervallet [, 55], som representerar intensiteten av färgerna rött, grönt respektive blått. En gråskalebild respektive en färgbild med höjden 8 pixels och bredden 6 pixels avbildas således enligt: int[][] grayimage = new int[8][6]; int[][][] colorimage = new int[8][6][]; Klassen ArrayList Ett fält är en statisk datastruktur, vilket innebär att storleken på fältet måste anges när fältet skapas. Detta innebär att fält inte är särskilt väl anpassade för att handha dynamiska datasamlingar, dvs datasamlingar som under sin livstid kan variera i storlek. För att handha dynamiska datasamlingar i ett fält måste man själv utveckla programkod för att t.ex: - ta bort ett element ur fältet - lägga in ett nytt element på en given position i fältet - öka storleken på fältet om ett nytt element inte ryms. Klassen ArrayList är en standardklass (av flera) för all handha samlingar av objekt. Särskilt när vi handhar dynamiska datasamlingar, är det lämpligt att använda klassen ArrayList istället för ett endimensionellt fält. ArrayList finns i paketet java.util.

Klassen ArrayList<E> Metod Beskrivning ArrayList<E>() skapar en tom ArrayList för element av typen E. void add(e elem) void add(int pos, E elem) void add(collection<? extends E> c) E get(int pos) E set(int pos, E elem) E remove(int pos) lägger in elem sist i listan (d.v.s. efter de element som redan finns i listan). lägger in elem på plats pos. Efterföljande element flyttas ett position framåt i listan. lägger in alla element i samlingen c sist i listan. returnerar elementet på plats pos. ersätter elementet på plats pos med elem, returnerar elementet som fanns på platsen pos. tar bort elementet på plats pos, returnerar det borttagna elementet. Efterföljande element i listan flyttas en position bakåt i listan. Klassen ArrayList<E> Metod int size() boolean isempty() int indexof(e elem) boolean cointains(object elem) void clear() String tostring() Beskrivning returnerar antalet element i listan returnerar true om listan är tom, annars returneras false returnerar index för elementet elem om detta finns i listan, annars returneras - returnerar true om elem finns i listan, annars returneras false tar bort alla elementen i listan returnerar en textrepresentation på formen [e, e,..., e n ] Anm: Metoderna indexof och cointains förutsätter att objekten i listan kan jämföras, d.v.s. klassen som objekten tillhör måste definiera metoden public boolean equals(object obj) Alla standardklasser, såsom String, Integer och Double, definierar metoden equals. 4

Klassen ArrayList Klassen ArrayList är en generisk klass. Detta innebär att när man skapar en lista av klassen ArrayList måste man ange en typparameter som specificerar vilken typ av objekt som skall lagras lagras i listan. Exempel: ArrayList<String> words = new ArrayList<String>(); ArrayList<Integer> values = new ArrayList<Integer>(); ArrayList<BigInteger> bigvalues = new ArrayList<BigInteger>(); ArrayList<Person> members = new ArrayList<Person>(); I en ArrayList kan man endast spara objekt, dvs. en ArrayList kan inte innehålla de primitiva datatyperna (t.ex. int, double, boolean och char). Vill man handha primitiva datatyper med hjälp av en ArrayList måste man lagra objekt av motsvarande omslagsklass. 5 Autoboxing och auto-unboxing Typomvandling sker automatiskt mellan primära datatyper och motsvarande omslagsklass. Detta kallas för autoboxing respektive auto-unboxing. Istället för att skriva Integer talobjekt = new Integer();... int tal = talobjekt.tovalue(); kan man skriva Integer talobjekt = ;... int tal = talobjekt; //autoboxing //auto-unboxing 6

Problemexempel Skriv en metod private static ArrayList<Integer> readlista() som läser in en indatasekvens består av osorterade heltal från standard input och returnerar dessa i en ArrayList. I indatasekvensen kan samma tal förekomma flera gånger, men i listan skall endast den första förekomsten av varje unikt tal skall lagras. Exempel: Antag att indatasekvensen består av talen 4 4 5 4, ett anrop av metoden readlist skall då returnera en lista som innehåller talen, 4,, 5, och. 8

Uppräkningstyper - enum I bland vill man kunna använda variabler som endast skall kunna anta vissa givna värden: gender: MALE, FEMALE state: READY, RUNNING, BLOCKED, DEAD suit: HEARTS, SPADES, DIAMONDS, CLUBS season: WINTER, SPRING, SUMMER, FALL bearing: NORTH, WEST, SOUTH, EAST I Java kan detta göras genom att deklarera särskilda uppräkningsklasser: public enum suit { enum inte class HEARTS, SPADES, DIAMONDS, CLUBS; }//suit Räkna upp alla värden (instanser) typen skall ha

Uppräkningstyper - enum Varje deklarerat (uppräknat) värde i en enum är en instans av klassen. Varje värde är implicit public, static och final, alltså en klasskonstant. Metod int compareto(e o) boolean equals(e o) String name() int I ordinal() String tostring) static E valueof(string str) static E[] values() Beskrivning returnerar ett negativt heltal om aktuellt objekt är mindre än argumentet o, om aktuellt objekt och argumentet o är lika och ett positivt heltal om aktuellt objekt är större än argumentet o. Jämförelsen görs efter den ordning objekten har deklarerats returnerar true om o är lika med aktuellt objekt, annars returneras false returnerar namnet på aktuellt objekt (enligt deklarationen) returnerar ordningstalet för aktuellt objekt (enligt deklarationen) returnerar namnet på aktuellt objekt (enligt deklarationen) returnerar objektet med det angivna namnet returnerar ett fält innehållande objekten i klassen Lägga till tillstånd på enum-konstanter Eftersom enum definierar en klass kan man ge tillstånd och beteenden till objekten som tillhör en uppräkningstyp, Tillståndet hos en instans beskrivs med hjälp av instansvariabler. Tillståndet för en instans ges som argument till instansen. En konstruktor för att initiera tillståndet behöver definieras. Konstruktorn får/kan inte vara public. public enum Customer { CHILD(5), ADULT(), SENIOR(6); private int price; private Customer(int price) { this.price = price; }//constructor public int getprice() { return price; }//getprice }//Customer Argument som anger tillståndet Konstruktor som sätter tillståndet 4

Lägga till beteenden på enum-konstanter public enum DayOfWeek { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; public int nrinweek() { return this.ordinal() + ; }//nrinweek public DayOfWeek tomorrow() { DayOfWeek[] days = DayOfWeek.values(); return days[(this.ordinal() + ) % days.length]; }//tomorrow public DayOfWeek yesterday() { DayOfWeek[] days = DayOfWeek.values(); return days[(this.ordinal() - ) % days.length]; }//yesterday public static DayOfWeek getdaywithnr(int daynr) { DayOfWeek[] days = DayOfWeek.values(); return days[daynr - ]; }//getdaywithnr }//DayOfWeek Returnerar vilket ordningsnummer i veckan Den aktuell dagen har Returnerar dagen efter aktuell dag Returnerar dagen före aktuell dag Returnerar dagen med ordningsnummer daynr i veckan 5 switch-satsen En switch-sats är en selekteringssats med flervalsalternativ. Varje alternativ beskrivs av en case-sats; som består dels av ett case-uttryck, dels av de satser som anger vad som skall göras om alternativet inträffar. I switch-satsen testas värdet av ett uttryck (expression) mot ett antal givna case-uttryck (value, value, ). Uttrycket (expression) måste vara en heltalstyp, typen char eller en uppräkningstyp. case-uttrycken måste ha samma typ som expression. case-uttrycken måste ha olika värden. switch-satsen kan innehålla ett default-alternativ, som avser de möjliga alternativ som inte anges i ett eget case-uttryck Syntax: switch (expression) { case value: statements; break; case value: case value: statements; break;...(more cases)... default: statements; } 6

switch-satsen Först evalueras uttrycket expression. Det erhållna värdet jämförs med värdena av caseuttrycken. Om det finns ett case-uttryck som har samma värde som expression, sker ett hopp till den sats som följer efter detta case-uttryck. Annars sker ett hopp till satsen efter default-alternativet (om ett sådant finns). Exekveringen av en case-sats, forsätter förbi andra case-uttryck tills switch-blocket är slut eller tills ett break-uttryck påträffas. Flera case-uttryck kan således finnas framför ett visst alternativ. Syntax: switch (expression) { case value: statements; break; case value: case value: statements; break;...(more cases)... default: statements; } 7 switch-satsen: Flödesscheman uttryck satser value value value value4 satser satser satser value5 satser uttryck satser value value value value4 satser satser satser value5 satser Oops: om man glömmer break körs även nästa case. 8

Shorthand operatorer Efter som operatorerna ++ och -- ändrar värdet på en variabel måste man vara observant om man använder dessa operatorer i kombination med en tilldelningsoperator. Betrakta nedanstående satser: firstnumber = ; secondnumber = ++firstnumber; Efter att satserna har utförts har både variabeln fistnumber och secondnumber värdet. När däremot följande satser exekveras firstnumber = ; secondnumber = firstnumber++; Har variabeln fistnumber värdet och variabeln secondnumber värdet. Prefixoperatorn (++i) utförs före tilldelningsoperatorn, medan postfixoperatorn (i++) utförs efter tilldelningsoperatorn. Använd shorthand operatorerna med med försiktighet!