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

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

Tvådimensionella fält

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

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

Flerdimensionella fält och textfiler

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

Objektorienterad programmering

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

Repetition av OOP- och Javabegrepp

Repetition av OOP- och Javabegrepp

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

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

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

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

Föreläsning 3. Iteration while-satsen

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

Arrayer. results

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

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

Lösningsförslag till tentamen

Instuderingsfrågor, del E

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

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

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

Tentamen OOP

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

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. Telefonboken igen, en bättre version. En jämförelse. Föreläsning 4

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Objektorienterad programmering

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

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

Del A (obligatorisk för alla)

Objektorienterad programmering

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

Lösningsförslag till tentamen

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

Mer om klasser och objekt

Föreläsning 3-4 Innehåll

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

OOP Objekt-orienterad programmering

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

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

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

F12 - Collections. ID1004 Objektorienterad programmering Fredrik Kilander

Fält och klassen String

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

OOP Objekt-orienterad programmering

Objektorienterad programmering i Java

Enkla variabler kontra referensvariabel

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

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

Lösningsförslag till tentamen

TENTAMEN OOP

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

Tentamen , Introduktion till Java, dtaa98, dtea53

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

Iteration while-satsen

TENTAMEN OOP

Del A (obligatorisk för alla)

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

public class BoundedCounter {

Algoritmer. Två gränssnitt

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.

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 1. Abstrakta datatyper, listor och effektivitet

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

TENTAMEN OOP

Laboration 4: Digitala bilder

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

Lösningsförslag till tentamen

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

Typkonvertering. Java versus C

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.

Föreläsning 9-10 Innehåll

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

Lösningsförslag till tentamen

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

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

F4. programmeringsteknik och Matlab

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

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

DAT043 Objektorienterad Programmering

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.

Instuderingsfrågor, del D

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

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

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

Parallellism, återblick

Tommy Färnqvist, IDA, Linköpings universitet

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

Lösningsförslag övning 2.

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

Transkript:

Föreläsning 8 Flerdimensionella fält ArrayList enum Flerdimensionella switch-satsen Föreläsning 8 ArrayList enum switch-satsen Tvådimensionella fält Tvådimensionella fält är fält av fält. int[][] tabell = new int[][4]; tabell fält

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: import javax.swing.joptionpane; static double[][] readmatrix(int size) { class Symmetric { double[][] thematrix = new double[size][size]; static void main(string[] args) { for (int row row < size; row = row + )matrisens { String input==; JOptionPane.showInputDialog("Ange gradtal: "); size col = Integer.parseInt(input); forintjavax.swing.joptionpane; (int = ; col < size; col = col + ) { import double[][] matrix = readmatrix(size); input = JOptionPane.showInputDialog("Ge element (" + row + ", " + co ifstring class Symmetric { (issymmetric(matrix)) thematrix [row][col] = Double.parseDouble(input); JOptionPane.showMessageDialog(null, "Matrisen är symetrisk!"); static void main(string[] args) { else input = JOptionPane.showInputDialog("Ange JOptionPane.showMessageDialog(null, "Matrisen är INTE symetrisk!"); matrisens gradtal: String // main int size = Integer.parseInt(input); thematrix ; double[][] matrix = readmatrix(size); // readmatrix if (issymmetric(matrix)) //before:joptionpane.showmessagedialog(null, matrix!= null "Matrisen är symetrisk!"); static boolean issymmetric(double[][] matrix) { else boolean okay = true; JOptionPane.showMessageDialog(null, är INTE symetris for (int row = ; row < matrix.length; row = row + "Matrisen ) //formain (int col = ; col < matrix[row].length; col = col + ) if (matrix[row][col]!= matrix[col][row]) Implementation: okay =fortsättning false; okay; //issymmetric static double[][] readmatrix(int size) { //Symmetric double[][] thematrix = new double[size][size]; for (int row = ; row < size; row = row + ) { for (int col = ; col < size; col = col + ) { String input = JOptionPane.showInputDialog("Ge element (" + row + ", " + col + ")"); thematrix[row][col] = Double.parseDouble(input); thematrix; // readmatrix //before: matrix!= null static boolean issymmetric(double[][] matrix) { boolean okay = true; for (int row = ; row < matrix.length; row = row + ) for (int col = ; col < matrix[row].length; col = col + ) if (matrix[row][col]!= matrix[col][row]) okay = false; okay; //issymmetric //Symmetric

Alternativ implementation av metoden readmatris, med användning av ett Scannerobjekt och inläsning från System.in: import java.util.scanner; static double[][] readmatrix(int size) { double[][] thematrix = new double[size][size]; System.out.print( "Ge element: "); import java.util.scanner; Scanner sc = new Scanner(System.in); for (int row row = row + ) {... for (int col= ;= ;rowcol<<size; size; col = col + ) { thematrix[row][col] static double[][] readmatrix(int size) { = sc.nextdouble(); double[][] thematrix = new double[size][size]; thematrix; System.out.print( "Ge element: "); // readmatrix Scanner sc = new Scanner(System.in); for (int row = ; row < size; row = row + ) { for (int col = ; col < size; col = col + ) { thematrix[row][col] = sc.nextdouble(); thematrix; // 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). void add(int pos, E elem) lägger in elem på plats pos. Efterföljande element flyttas en position framåt i listan. 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å formen [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 for-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 for-satsen. Genomlöpning av hela samlingarna med den vanliga for-satsen double[] values = new double[]; ArrayList<String> listan = new ArrayList<String>(); for (int index = ; index < values.length; index = index +) System.out.println(values[index]); Genomlöpning av hela samlingarna med den vanliga for-satsen for (int pos = ; pos < listan.size(); pos = pos +) double[] values = new double[]; System.out.println(listan.get(pos)); ArrayList<String> listan = new ArrayList<String>(); Genomlöpning av hela samlingarna med den förenklade for-satsen for (int index = double[] ; index < values.length; index = index +) values = new double[]; ArrayList<String> listan = new ArrayList<String>(); System.out.println(values[index]); (double v : values) for (int pos = ; for pos < listan.size(); pos = pos +) System.out.println(v); for (String str : listan) System.out.println(listan.get(pos)); System.out.println(str); Genomlöpning av hela samlingarna med den förenklade fo double[] values = new double[]; ArrayList<String> listan = new ArrayList<String>(); for (double v : values) Problemexempel System.out.println(v); Skriv en metod for (String str : listan) System.out.println(str); 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; class PhoneBook. era listan { private Entry[] book; Implementation class Entry { private int count; private String name; static ArrayList<Integer> readlist() { PhoneBook(int size) ArrayList<Integer> list ={new ArrayList<Integer>(); private String number; book = Scanner new Entry[size]; in = new Scanner(System.in); Entry(String name, String num while (in.hasnextint()) { count = ; this.name = name; int value = in.nextint(); //constructor if (!list.contains(value)) { this.number = number; list.add(value); static ArrayList<Integer> { void put(string name, String nr) { readlist() //constructor book[count] = new Entry(name, ArrayList<Integer> list nr); = new ArrayList<Integer>(); String getname() { list; count =Scanner count + in ; = new Scanner(System.in); name; //readlist //put while (in.hasnextint()) { //getname Stringint get(string { value =name) in.nextint(); String getnumber() { for (int i =if;(!list.contains(value)) i < count; i = i +) { number; if (name.equals(book[i].getname())) //getnumber list.add(value); book[i].getnumber(); //Entry null; KlassenPhoneBook implementerad med fält //get //PhoneBook list; Maximal storlek //readlist måste anges class PhoneBook { private Entry[] book; class Entry { private int count; private String name; PhoneBook(int size) { private String number; book = new Entry[size]; Entry(String name, String number) { Antalet element count = ; this.name = name; måste bokföras //constructor this.number = number; void put(string name, String nr) { book[count] = new Entry(name, nr); count = count + ; //put String get(string name) { for (int i = ; i < count; i = i +) if (name.equals(book[i].getname())) book[i].getnumber(); null; //get //PhoneBook //constructor String getname() { name; //getname String getnumber() { number; //getnumber //Entry

Klassen PhoneBook implementation med ArrayList import java.util.arraylist; class PhoneBook { private ArrayList<Entry> book = new ArrayList<Entry>(); PhoneBook() { import java.util.arraylist; book = new ArrayList<Entry>(); class Entry { //constructor class PhoneBook { private String name; private = new ArrayList<Entry> void put(string name, String book nr) { privatearraylist<entry>(); String number; book.add(new Entry(name, nr)); Entry(String name, String number) { PhoneBook() { //put this.name = name; book = new ArrayList<Entry>(); this.number = number; String get(string name) { class Entry { for (Entry e : book) //constructor //constructor private String name; if (name.equals(e.getname())) String getname() { e.getnumber(); void put(string name, String nr) { name; private String number; null; //getname book.add(new Entry(name, nr)); //get String getnumber() { Entry(String name, //PhoneBook //put number; this.name = name; //getnumber String get(string name) { //Entry this.number = number; String nu //constructor for (Entry e : book) if (name.equals(e.getname())) e.getnumber(); null; //get //PhoneBook String getname() { name; //getname String getnumber() { Uppräkningstyper - enum number; //getnumber I bland vill man kunna använda variabler som endast//entry 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: 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, static och final, alltså en klasskonstant. Metod Beskrivning int compareto(e obj) erar ett negativt heltal om aktuellt objekt är mindre än argumentet obj, om aktuellt objekt och argumentet obj är lika och ett positivt heltal om aktuellt objekt är större än argumentet obj. Jämförelsen görs efter den ordning objekten har deklarerats boolean equals(e obj) erar true om obj är lika med aktuellt objekt, annars eras false String name() erar namnet på aktuellt objekt (enligt deklarationen) int I ordinal() erar ordningstalet för aktuellt objekt (enligt deklarationen) String tostring() erar namnet på aktuellt objekt (enligt deklarationen) static E valueof(string str) erar objektet med det angivna namnet static E[] values() erar 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. Argument som anger tillståndet enum enum Customer Customer {{ CHILD(5), CHILD(5), ADULT(), ADULT(), SENIOR(6); SENIOR(6); private private int int price; price; private private Customer(int Customer(int price) price) {{ this.price = price; this.price = price; //constructor //constructor int int getprice() getprice() {{ price; price; //getprice //getprice //Customer //Customer Konstruktor som sätter tillståndet

Lägga till beteenden på enum-konstanter enum enum DayOfWeek DayOfWeek {{ MONDAY, MONDAY, TUESDAY, TUESDAY, WEDNESDAY, WEDNESDAY, THURSDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; FRIDAY, SATURDAY, SUNDAY; int int nrinweek() nrinweek() {{ this.ordinal() this.ordinal() ++ ; ; //nrinweek //nrinweek DayOfWeek DayOfWeek tomorrow() tomorrow() {{ DayOfWeek[] DayOfWeek[] days days == DayOfWeek.values(); DayOfWeek.values(); days[(this.ordinal() days[(this.ordinal() ++ ) ) % % days.length]; days.length]; //tomorrow //tomorrow DayOfWeek DayOfWeek yesterday() yesterday() {{ DayOfWeek[] days DayOfWeek[] days == DayOfWeek.values(); DayOfWeek.values(); days[(this.ordinal() days[(this.ordinal() -- ) ) % % days.length]; days.length]; //yesterday //yesterday static static DayOfWeek DayOfWeek getdaywithnr(int getdaywithnr(int daynr) daynr) {{ DayOfWeek[] DayOfWeek[] days days == DayOfWeek.values(); DayOfWeek.values(); days[daynr days[daynr -- ]; ]; //getdaywithnr //getdaywithnr //DayOfWeek //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 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 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 (enum). 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; case value: case value: statements;...(more cases)... default: statements;

switch-satsen Först evalueras uttrycket expression. Syntax: 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. switch (expression) { case value: statements; case value: case value: statements;...(more cases)... default: statements; switch-satsen: Flödesscheman uttryck value value value value5 value4 uttryck value Oops: om man glömmer break körs även nästa case. value value value4 value5

switch-satsen: Exempel enum DayOfWeek { MONDAY,TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY; static void tellitlikeitis(dayofweek day) { //DayOfWeek enum DayOfWeek {switch (day) { case MONDAY: MONDAY,TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUND System.out.println("Mondays are bad."); case FRIDAY: static void tellitlikeitis(dayofweek day) { //DayOfWeek System.out.println("Fridays are better."); Utförs för SATURDAY switch (day) { och SUNDAY case SATURDAY: case MONDAY: case SUNDAY: System.out.println("Mondays are bad."); System.out.println("Weekends are best."); Utförs för TUESDAY, default: WEDNESDAY och case FRIDAY: System.out.println("Midweek days are so-so."); THURSDAY System.out.println("Fridays are better."); //tellitlikeitis Shorthand Motsvarand uttryck ++x x+ --x x- x++ x+ x-x- case SATURDAY: x += y case SUNDAY: x = x + y System.out.println("Weekends are best."); x -= y x=x-y x *= y x=x*y default: System.out.println("Midweek days are so-so.") x /= yshorthand operatorer x=x/y //tellitlikeitis 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 ++x --x x++ x-x += y x -= y x *= y x /= y Motsvarand uttryck x+ x- x+ x- x=x+y x=x-y x=x*y x=x/y

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 : firstnumber = ; secondnumber = ++firstnumber; Efter att na har utförts har både variabeln fistnumber och secondnumber värdet. När däremot följande 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!