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

Relevanta dokument
Flerdimensionella fält och textfiler

Objektorienterad programmering

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 Textfiler 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

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

Tvådimensionella fält

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

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

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

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

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

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

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

Föreläsning 3. Iteration. while-satsen for-satsen do-satsen

Arrayer. results

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

Föreläsning 3. Iteration while-satsen

Objektorienterad programmering

Iteration. Föreläsning 3. TDA540 - Objektorienterad Programmering

Instuderingsfrågor, del E

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

Objektorienterad programmering

Testning och felhantering

Föreläsnings 9 - Exceptions, I/O

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

OOP Objekt-orienterad programmering

Föreläsning 3. Föreläsning 3. Iteration. while-satsen for-satsen do-satsen. while-satsen. do-satsen. Datatypen double

Föreläsning REPETITION & EXTENTA

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:

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

Del A (obligatorisk för alla)

Objektorienterad programmering E. Algoritmer. Telefonboken, påminnelse (och litet tillägg), 1. Telefonboken, påminnelse (och litet tillägg), 2

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

Objektorienterad programmering. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

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

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

Laboration 4: Digitala bilder

Föreläsning 9-10 Innehåll

Lösningsförslag till tentamen

Lösningsförslag till tentamen

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Föreläsning 3-4 Innehåll

Del A (obligatorisk för alla)

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Tentamen OOP

Språkkonventioner och redigering av tal.

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Lösningsförslag till tentamen

Mer om klasser och objekt

Algoritmer. Två gränssnitt

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

Instuderingsfrågor, del D

Objektorienterad programmering i Java

Laboration 3. Redovisning Uppgifterna skall vara demonstrerade och godkända av en handledare senast måndag 22/2.

Lösningsförslag till tentamen

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

Lösningsförslag till tentamen

Lösningsförslag till tentamen

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

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

TENTAMEN OOP

OOP Objekt-orienterad programmering

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

Lösningsförslag till tentamen

Objekt-orientering. Java är ett objekt-orienterat programmeringsspråk

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

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

Föreläsning 3. Föreläsning 3

Föreläsning 3. Föreläsning 3

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

Skillnader mellan Python och Java

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

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 6. Fält. Fält Klassen String. Fält

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

Föreläsning 3. Stack

725G61 - Laboration 2 Loopar och arrayer. Johan Falkenjack

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

Enkla variabler kontra referensvariabel

JAVAUTVECKLING LEKTION 8

Lösningsförslag till tentamen

DAT043 Objektorienterad Programmering

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

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 3-4 Innehåll. Diskutera. Metod. Programexempel med metod

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

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

Objektorienterad programmering

Föreläsning 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

Föreläsning 3. Stack

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

Övning vecka 6. public void method2() { //code block C method3(); //code block D }//method2

Transkript:

Föreläsning 7 Läsa Läsa och och skriva skriva textfiler textfiler Flerdimensionella Flerdimensionella fält fält ArrayList ArrayList In- och utmatning av data Utan att kunna läsa och skriva data skulle de flesta program vara ganska meningslösa. Den data som ett program är beroende av kan t.ex. ges via tangentbordet finnas i en fil hämtas från nätet vara utdata från ett annat program. Ett program kan kan också behöva skriva/skicka data till dessa enheter. Java tillhandahåller ett flertal färdiga klasser för att underlätta I/Ohanteringen.

Läsa data från tangentbordet I Java är tangentbordet kopplat till System.in, vilket är ett objekt av typen InputStream. För att underlätta läsningen kopplas System.in till ett Scanner-objekt. Konstruktorer Beskrivning Scanner(InputStream source) Constructs a new Scanner that produces values scanned from the specified input stream. Bytes from the stream are converted into characters. java.util.scanner; java.util.scanner; class class ReadFromKeyboard ReadFromKeyboard {{ static static void void main(string[] main(string[] args) args) {{ Scanner Scanner keyboard keyboard == new new Scanner(System.in); Scanner(System.in); System.out.print( System.out.print("Give "Give the the integer integer numbers: numbers: "); "); int int sum sum == ; ; while while (keyboard.hasnext()) (keyboard.hasnext()) {{ sum sum == sum sum ++ keyboard.nextint(); keyboard.nextint(); System.out.println( System.out.println("The "The ssum um of of the the numbers: numbers: "" ++ sum); sum); }//main }//main }//ReadFromKeyboard }//ReadFromKeyboard Läsa data från textfiler För att läsa från en textfil använder vi klasserna File och Scanner. Konstruktor File(String pathname) Beskrivning Creates a new File instance by converting the given pathname string into an abstract pathname. Konstruktor Scanner(File source) throws FileNotFoundException Beskrivning Constructs a new Scanner that produces values scanned from the specified file. Bytes from the file are converted into characters. Konstruktorn kastar ett en FileNotFoundException om den angivna filen inte finns. Detta är en s.k. kontrollerande exception som måste fångas eller kastas vidare.

Läsa data från textfiler Kasta exception java.util.scanner; java.util.scanner; vidare java.io.file; java.io.file; java.io.filenotfoundexception; java.io.filenotfoundexception; class class ReadFromTextFile ReadFromTextFile {{ static static void void main(string[] main(string[] args) args) throws throws FileNotFoundException FileNotFoundException {{ File File in in == new new File("indata.txt"); File("indata.txt"); Scanner Kan resultera i Scanner sc sc == new new Scanner(in); Scanner(in); FileNotFoundException int int sum sum == ; ; while while (sc.hasnext()) (sc.hasnext()) {{ sum sum == sum sum ++ sc.nextint(); sc.nextint(); System.out.println( System.out.println("The "The ssum um is: is: "" ++ sum); sum); }//main }//main }//ReadFromTextFile }//ReadFromTextFile Skriva till textfiler För att skriva till en textfil använder vi klassen PrintWriter. Konstruktor Beskrivning PrintWriter(String filename) throws FileNotFoundException Operationer void close() void print(int i) void print(double d) Creates a new PrintWriter, without automatic line flushing, with the specified file name. Beskrivning Closes the stream and releases any system resources associated with it. Prints an integer. Prints a double-precision floating-point number..... void println(int i)... Prints an integer and then terminates the line.

Skriva till textfiler Kasta exception vidare java.io.printwriter; java.io.printwriter; java.io.filenotfoundexception; java.io.filenotfoundexception; class class WriteToTextFile WriteToTextFile {{ static static void void main(string[] main(string[] args) args) throws throws FileNotFoundException FileNotFoundException {{ PrintWriter PrintWriter out out == new new PrintWriter("out.txt"); PrintWriter("out.txt"); (int (int ii == ; ; ii <= <= ; ; ii == ii ++ ) ) {{ out.println(i); out.println(i); Kan resultera i FileNotFoundException out.close(); out.close(); }//main }//main }//WriteToTextFile }//WriteToTextFile 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; 4 7 9 5 4 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}, 4 7 9 5 4 9 4 7 9 5 4 9 {5, 4, }, {9, ; Tvådimensionella fält int[][] tabell = {{, 4, 7, 9}, {5, 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

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 aij = aji 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 5 4 6 5 7 ger utskriften MATRISEN ÄR INTE SYMMETRISK, medan matrisen 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 aij för vilket det gäller att aij aji 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 aij i matrisen A 4.. if (aij aji ) okey = false; 5. if okey Skriv ut Matrisen är symmetrisk.. else Skriv ut Matrisen är INTE symmetrisk.. Datarepresentation: A är av datatypen double[][].

Implementation: javax.swing.*; javax.swing.*; class class Symmetric Symmetric {{ static static void void main(string[] main(string[] args) args) {{ String String input input == JOptionPane.showInputDialog("Ange JOptionPane.showInputDialog("Ange matrisens matrisens gradtal: gradtal: "); "); int int size size == Integer.parseInt(input); Integer.parseInt(input); double[][] double[][] matrix matrix == readmatrix(size); readmatrix(size); ifif (issymmetric(matrix)) (issymmetric(matrix)) JOptionPane.showMessageDialog(null, JOptionPane.showMessageDialog(null, "Matrisen "Matrisen är är symetrisk!"); symetrisk!"); else else JOptionPane.showMessageDialog(null, JOptionPane.showMessageDialog(null, "Matrisen "Matrisen är är INTE INTE symetrisk!"); symetrisk!"); //// main main Implementation: tsättning static static double[][] double[][] readmatrix(int readmatrix(int size) size) {{ double[][] double[][] thematrix thematrix == new new double[size][size]; double[size][size]; (int (int row row == ; ; row row << size; size; row row == row row ++ ) ) {{ (int (int col col == ; ; col col << size; size; col col == col col ++ ) ) {{ String String input input == JOptionPane.showInputDialog("Ge JOptionPane.showInputDialog("Ge element element (" (" ++ row row ++ ", ", "" ++ col col ++ ")"); ")"); thematrix thematrix[row][col] [row][col] == Double.parseDouble(input); Double.parseDouble(input); thematrix thematrix;; //// readmatrix readmatrix //bee: //bee: matrix matrix!=!= null null static static boolean boolean issymmetric(double[][] issymmetric(double[][] matrix) matrix) {{ boolean boolean okay okay == true; true; (int (int row row == ; ; row row << matrix.length; matrix.length; row row == row row ++ ) ) (int (int col col == ; ; col col << matrix[row].length; matrix[row].length; col col == col col ++ ) ) ifif (matrix[row][col] (matrix[row][col]!=!= matrix[col][row]) matrix[col][row]) okay okay == false; false; okay; okay; }//issymmetric }//issymmetric }//Symmetric }//Symmetric

Alternativ implementation av metoden readmatris, med användning av ett Scannerobjekt: java.util.*; java.util.*;...... static static double[][] double[][] readmatrix(int readmatrix(int size size)) {{ double[][] double[][] thematrix thematrix == new new double[ double[size size][ ][size size]; ]; String String input input == JOptionPane.showInputDialog( JOptionPane.showInputDialog( "Ge "Ge element: element: "); "); Scanner Scanner sc sc == new new Scanner(input); Scanner(input); (int (int row row == ; ; row row << size size;; row row == row row ++ ) ) {{ int int col col == ; ; while while ((col col << size size)) {{ ifif (sc.hasnextdouble()) (sc.hasnextdouble()) {{ thematrix[ thematrix[row row][ ][col col]] == sc.nextdouble(); sc.nextdouble(); col col == col col ++ ; ; else else {{ input input == JOptionPane.showInputDialog( JOptionPane.showInputDialog( "Ge "Ge fler fler element: element: "); "); sc sc == new new Scanner(input); Scanner(input); thematrix; thematrix; //// readmatrix readmatrix 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) 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. void add(collection<? extends E> c) lägger in alla element i samlingen c sist i listan. void add(int pos, E elem) E get(int pos) erar elementet på plats pos. E set(int pos, E elem) ersätter elementet på plats pos med elem, erar elementet som fanns på platsen pos. E remove(int pos) tar bort elementet på plats pos, erar det borttagna elementet. Efterföljande element i listan flyttas en position bakåt i listan. Klassen ArrayList<E> Metod Beskrivning int size() erar antalet element i listan boolean isempty() erar true om listan är tom, annars eras false int indexof(e elem) erar index för elementet elem om detta finns i listan, annars eras - boolean cointains(object elem) erar true om elem finns i listan, annars eras false void clear() tar bort alla elementen i listan String tostring() erar en textrepresentation på men [e, e,..., en] 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 boolean equals(object obj) Alla standardklasser, såsom String, Integer och Double, definierar metoden equals.

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. 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

Förenklad -sats När man vill löpa igenom alla objekt i en samlingar (t.ex. ett objekt av ArrayList eller ett en-dimensionellt fält) finns den förenklade -satsen. Genomlöpning Genomlöpning av av hela hela samlingarna samlingarna med med den den vanliga vanliga -satsen -satsen double[] double[] values values == new new double[]; double[]; ArrayList<String> listan == new ArrayList<String> listan new ArrayList<String>(); ArrayList<String>();...... (int (int index index == ; ; index index << values.length; values.length; index index == index index +) +) System.out.println(values[index]); System.out.println(values[index]); (int (int pos pos == ; ; pos pos << listan.size(); listan.size(); pos pos == pos pos +) +) System.out.println(listan.get(pos)); System.out.println(listan.get(pos)); Genomlöpning Genomlöpning av av hela hela samlingarna samlingarna med med den den förenklade förenklade -satsen -satsen double[] double[] values values == new new double[]; double[]; ArrayList<String> listan == new ArrayList<String> listan new ArrayList<String>(); ArrayList<String>();...... (double v : values) (double v : values) System.out.println(v); System.out.println(v); (String (String str str :: listan) listan) System.out.println(str); System.out.println(str); 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 erar 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å era en lista som innehåller talen, 4,, 5, och.

Algoritm:. while (fler tal att läsa).. läs talet.. if (talet inte finns i listan )... lagra talet i listan;. era listan Implementation static static ArrayList<Integer> ArrayList<Integer> readlist() readlist() {{ ArrayList<Integer> ArrayList<Integer> list list == new new ArrayList<Integer>(); ArrayList<Integer>(); Scanner Scanner in in == new new Scanner(System.in); Scanner(System.in); while while (in.hasnextint()) (in.hasnextint()) {{ int int value value == in.nextint(); in.nextint(); ifif (!list.contains(value)) (!list.contains(value)) {{ list.add(value); list.add(value); list; list; }//readlist }//readlist Klassen PhoneBook implementerad med fält Maximal storlek måste anges class class PhoneBook PhoneBook {{ private Entry[] book; private Entry[] book; private private int int count; count; class class Entry Entry {{ private private String String name; name; PhoneBook(int PhoneBook(int size) size) {{ private book private String String number; number; book == new new Entry[size]; Entry[size]; Antalet element count count == ; ; Entry(String Entry(String name, name, String String number) number) {{ måste bokföras this.name this.name == name; name; this.number this.number == number; number; void void put(string put(string name, name, String String nr) nr) {{ book[count] book[count] == new new Entry(name, Entry(name, nr); nr); count count == count count ++ ; ; String String getname() getname() {{ Exekveringsfel }//put }//put name; name; om count >= size }//getname }//getname String String get(string get(string name) name) {{ (int (int ii == ; ; ii << count; count; ii == ii +) +) String String getnumber() getnumber() {{ ifif (name.equals(book[i].getname())) (name.equals(book[i].getname())) number; number; book[i].getnumber(); book[i].getnumber(); }//getnumber }//getnumber null; null; }//Entry }//Entry }//get }//get }//PhoneBook }//PhoneBook

Klassen PhoneBook implementation med ArrayList java.util.arraylist; java.util.arraylist; class class PhoneBook PhoneBook {{ private private ArrayList<Entry> ArrayList<Entry> book book == new new ArrayList<Entry>(); ArrayList<Entry>(); PhoneBook(int PhoneBook(int size) size) {{ book book == new new ArrayList<Entry>(); ArrayList<Entry>(); class class Entry Entry {{ private private String String name; name; void void put(string put(string name, name, String String nr) nr) {{ private private String String number; number; book.add(new book.add(new Entry(name, Entry(name, nr)); nr)); Entry(String Entry(String name, name, String String number) number) {{ }//put }//put this.name this.name == name; name; this.number this.number == number; number; String String get(string get(string name) name) {{ (Entry (Entry ee :: book) book) ifif (name.equals(e.getname())) (name.equals(e.getname())) String String getname() getname() {{ e.getnumber(); e.getnumber(); name; name; null; null; }//getname }//getname }//get }//get String String getnumber() getnumber() {{ }//PhoneBook }//PhoneBook number; number; }//getnumber }//getnumber }//Entry }//Entry Shorthand operatorer I Java finns ett antal shorthand operatorer. Dels finns operatorer för increment och decrement, både i en prefix och i en postfix version, dels finns sammansatta tilldelningsoperatorer. Shorthand Shorthand ++x ++x --x --x x++ x++ x-x-xx += += yy xx -= -= yy xx *= *= yy xx /= /= yy Motsvarand Motsvarand uttryck uttryck xx ++ xx -- xx ++ xx -- xx == xx ++ yy xx == xx -- yy xx == xx ** yy xx == xx // yy

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!