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

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

Dagens föreläsning. Instickssortering med hjälp av en ArrayList. Omslagsklasser. Metoderna equals och compareto. Läsa filer. Scanner-repetition

Dagens föreläsning. Omslagsklasser. Metoderna equals och compareto. Läsa filer. Programs hantering av fel. Scanner-repetition.

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

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 )

Föreläsning REPETITION & EXTENTA

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

OOP Objekt-orienterad programmering

Del A (obligatorisk för alla)

Föreläsning 3-4 Innehåll

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

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.

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

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

Del A (obligatorisk för alla)

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

Föreläsning 8 SLUMPTAL, SIMULERING + INTRODUKTION TILL VEKTORER

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

Tentamen OOP

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

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

Lösningsförslag övning 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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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.

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

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

TENTAMEN OOP

Variabler som hör till enskilda objekt. Deklareras på översta nivån i klassen och i regel som private.

OOP Objekt-orienterad programmering

Arrayer. results

TENTAMEN OOP

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

OOP Objekt-orienterad 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

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 2. Täcker material från lektion 1, 2, 3 och 4:

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

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

Programmeringsteknik I. Föreläsning 3: Klasser och arrayer

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

Objektorienterad Programmering (TDDC77)

Objektorientering. Objekt och metoder. Objektorientering. Viktiga begrepp. Klass. Objekt. Deklarativ programmering

Lösningsförslag till tentamen

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Del A (obligatorisk för alla)

Mer om klasser och objekt

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Tentamen i Programmeringsteknik I

Programmeringsteknik och Matlab. Dagens program. Viktiga datum. Repetitionsexempel. Repetition av if/else, for, while och Scanner

Lösningsförslag till tentamen i EDA011/EDA017 Programmeringsteknik för F, E, I, π och N 25 maj 2009

Objektorienterad programmering i Java

Fält av referenser. Konstruktorerna används för att skapa Bilar och Trafikljus.

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

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

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

2 b) Följande finns definierat: public class Spel String titel = "Spel"; Dice[] tärningar = new Dice[10]; tärningar[0] = new Dice("Röd"); tärningar[1]

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

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

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

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

F4. programmeringsteknik och Matlab

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

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

//Använd main som ett "handtag" för att hålla ihop programmet. //Själva programmet finns i övriga klasser.

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

TDDE10 TDDE11, 725G90/1. Objektorienterad programmering i Java, Föreläsning 2 Erik Nilsson, Institutionen för Datavetenskap, LiU

4 13 / %.; 8 </" '': " / //&' " " ' * TelefonKostnad +,-%&. #!" $% " &' . > / ' 5 /' * 13/ &' static Math 1+" &'/ % 12 "" static "' * 1 /") %& &

Föreläsning 7-8 Innehåll

Hur ser ett Java-program ut?

Enkla variabler kontra referensvariabel

Objekt som argument. Föreläsning 7-8 Innehåll. Hur komma åt den andra kvadratens attribut? Anropa metod på objektet självt

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

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

OOP Objekt-orienterad programmering

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

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

Skillnader mellan Python och Java

Lite om reella tal. Programmering. I java. Om operatorers associativitet och prioritet

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

Repetition av OOP- och Javabegrepp

Presentation av trafiksimuleringsprojektet

Objektorienterad Programmering (TDDC77)

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

Arrayer (fält)

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

Command line argumenter. Objektorienterad Programmering (TDDC77) Vad blir resultatet? Nu då? Ahmed Rezine. Hösttermin 2016

Examination i. PROGRAMMERINGSTEKNIK F1/TM1 TIN212 (Dugga) Dag: Onsdag Datum: Tid: (OBS 3 tim) Rum: V

Föreläsning 1 & 2 INTRODUKTION

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

Transkript:

(16 februari 2016 F5.1 ) Dagens text Programmeringsteknik Mer om Scanner-klassen Dialogrutor (klassen JOptionPane) Bubbelsortering ArrayList Omslagsklasser

Arbetsexempel (16 februari 2016 F5.2 )

Pokertärningar (16 februari 2016 F5.3 )

(16 februari 2016 F5.4 ) Tärning public class PokerDice { private int value; public PokerDice() { this.roll(); public int getvalue() { return this.value; public void roll() { this.value = (int)(math.random()*6) + 1; public String tostring() { return "" + value; Observera public static void main(string[] args) { PokerDice d = new PokerDice(); for (int i= 1; i<=50; i++) { d.roll(); System.out.print(d + " "); if (i%10 == 0) { System.out.println(); > run PokerDice 2 5 4 1 1 2 6 3 1 2 1 2 6 1 4 1 2 5 1 3 6 3 4 2 5 3 6 5 4 6 5 1 4 2 1 5 1 5 4 3 6 5 3 3 1 3 1 4 4 6

(16 februari 2016 F5.5 ) Hur gör vi en tärning till en pokertärning? Om vi kör precis samma main som ovan vill vi ha > run PokerDice E Kn 9 K 9 10 9 10 K K E E 10 9 Kn E 9 9 Kn Kn 10 10 10 Kn K 9 K Kn K Kn E E Kn D 9 K D Kn 9 D 9 E D K Kn D D E E D Lösning: Skriv om tostring-metoden!

(16 februari 2016 F5.6 ) tostring Försök 1 public String tostring() { if (value == 1 ) return "9"; else if (value == 2) return "10";...? Nää! Glöm det!

(16 februari 2016 F5.7 ) Bättre tostring Gör en array med strängar: String[] symbols = {"9 ", "10", "Kn", "D ", "K ", "E "; och använd value-1 som index: return symbols[value-1]; i tostring-metoden.

(16 februari 2016 F5.8 ) Var ska symbols deklareras? Som lokal variabel i tostring-metoden: public String tostring() { String[] symbols = {"9 ", "10", "Kn", "D ", "K ", "E "; return symbols[value-1]; eller som en instansvariabel i klassen PokerDice: public class PokerDice { private int value; private String[] symbols = {"9 ", "10", "Kn", "D ", "K ", "E "; Bäst är att göra den till en klassvariabel (eller konstant): public class PokerDice { private int value; private static String[] symbols = {"9 ", "10", "Kn", "D ", "K ", "E "; DrJava

(16 februari 2016 F5.9 ) PokerSet - 5 pokertärningar Hur kommer man igång? Princip: Se till att ha något som kan köras så fort som möjligt! public class PokerSet { instansvariabler private PokerDice[] thedice; konstruktor public PokerSet() {... tostring-metod public String tostring() {... main-metod public static void main(string[] a) {...

(16 februari 2016 F5.10 ) PokerSet: Konstruktor public class PokerSet { private PokerDice[] thedice; public PokerSet() { thedice = new PokerDice[5];? Man måste även skapa elementen i arrayen!

(16 februari 2016 F5.11 ) PokerSet: Konstruktor public class PokerSet { private PokerDice[] thedice; public PokerSet() { thedice = new PokerDice[5]; for (int i=0; i<5; i++) { thedice[i] = new PokerDice(); En sak som jag inte gillar - den magiska talet 5.

(16 februari 2016 F5.12 ) PokerSet: Konstruktor Snyggare: public class PokerSet { public static final int NUMBER_OF_DICE = 5; private PokerDice[] thedice; public PokerSet() { thedice = new PokerDice[NUMBER_OF_DICE]; for (int i=0; i<thedice.length; i++) { thedice[i] = new PokerDice();

(16 februari 2016 F5.13 ) PokerSet: Ännu snyggare med två konstruktor public class PokerSet { private PokerDice[] thedice; public PokerSet(int numberofdice) { thedice = new PokerDice[numberOfDice]; for (int i=0; i<thedice.length; i++) { thedice[i] = new PokerDice(); public PokerSet() { this(5); Observera att vi inte behöver (och därmed inte bör) lagra antalet tärningar. Koden kan använda thedice.length

(16 februari 2016 F5.14 ) PokerSet: tostring-metoden public String tostring() { String result = "" + thedice[0]; for (int i=1; i<thedice.length; i++) { result += ", " + thedice[i]; return "[" + result + "]"; Kan man använda for - each? Nej, svårt med kommatecknet. Anna berättade om Arrays på förra föreläsningen. Där finns en bra klassmetod: public String tostring() { return Arrays.toString(theDice);

(16 februari 2016 F5.15 ) PokerDice: Första körbara program import java.util.arrays; public class PokerSet { private PokerDice[] thedice; public PokerSet() { this(5); public static void main(string[] args) PokerSet pokerset = new PokerSet(); System.out.println(pokerSet); public String tostring() { return Arrays.toString(theDice); public PokerSet(int numberofdice) { thedice = new PokerDice[numberOfDice]; for (int i=0; i<thedice.length; i++) { thedice[i] = new PokerDice(); DrJava

(16 februari 2016 F5.16 ) PokerDice: Metoden roll med test i main public void roll() { for (PokerDice dice : thedice) { dice.roll(); public static void main(string[] args) { PokerSet pokerset = new PokerSet(); while (true) { pokerdice.roll(); System.out.println(pokerSet); DrJava

(16 februari 2016 F5.17 ) PokerDice: Resultat med fråga om fortsätta Så här: [9, D, Kn, 9, K ] Igen? (j/n) j [E, D, Kn, D, K ] Igen? (j/n) j [9, E, 10, 9, E ] Igen? (j/n) n >

(16 februari 2016 F5.18 ) Klassen Scanner Klassen Scanner är mycket användbar för att läsa och tolka text (strömmar av tecken). Klassen importeras: import java.util.scanner Måste kopplas till den teckenström den ska tolka. Det görs när man skapar scanner-objektet dvs i konstruktoranropet: Scanner scan = new Scanner(System.in) som kopplar scannern till tangentbordet.

(16 februari 2016 F5.19 ) Klassen Scanner Den enda Scanner-metod som behöver just nu är String nextline() som hämtar och returnerar nästa rad. Så här:... System.out.print("Igen? (j/n)"); String answer = scan.nextline();... DrJava

(16 februari 2016 F5.20 ) PokerSet: main-metod med do-sats public static void main(string[] args) { PokerSet pokerset = new PokerSet(); Scanner scan = new Scanner(System.in); String answer; do { pokerset.roll(); System.out.println(pokerSet); System.out.print("Igen? (j/n)"); answer = scan.nextline(); while (!answer.equals("n")); DrJava

(16 februari 2016 F5.21 ) Utfallet bör presenteras sorterat! Vi tittar på bubbelsortering som kanske är den enklaste att koda men också en av de sämsta. Inget problem vid små mängder. Antag att vi har en int[] a med n element som ska sorteras. Den fundamentala operationen i bubbelsort är att jämföra två intilliggande element och byta plats ( swappa ) om ordningen är fel: if (a[i] < a[i+1]) { int temp = a[i]; a[i] = a[i+1]; a[i+1] = temp;

(16 februari 2016 F5.22 ) Sortering med Bubbelsort Denna operation ska upprepas för alla möjliga värden på i (dvs från 0 till n-2): for (int i=0; i<n-1; i++) { if (a[i] < a[i+1]) { int temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; Detta svep över arrayen måste sedan upprepas tills den är sorterad.. Antingen tänker man efter hur många gånger det maximalt kan behövas eller så kollar man om det blev någon swap.

(16 februari 2016 F5.23 ) Sortering med Bubbelsort Vi använder en logisk variabel swapped för att avgöra om det blivit något byte under ett svep. boolean swapped = true; while (swapped) { swapped = false; for (int i=0; i<n-1; i++) { if (a[i] < a[i+1]) { int temp = a[i]; a[i] = a[i+1]; a[i+1] = temp; swapped = true; Det går att effektivisera algoritmen en del (t ex genom att inse att den inre loppen succesivt kan kortas) men...

(16 februari 2016 F5.24 ) PokerSet - Sortering Använd getvalue för att avgöra ordning! public void sort() { boolean swapped = true; while (swapped) { swapped = false; for (int i = 0; i < thedice.length - 1; i++) { if (thedice[i].getvalue() < thedice[i+1].getvalue() ) { PokerDice temp = thedice[i]; thedice[i] = thedice[i+1]; thedice[i+1] = temp; swapped = true;

(16 februari 2016 F5.25 ) PokerSet - Sortering Vem ska anropa sort? main? roll? tostring? Konstruktorn?

(16 februari 2016 F5.26 ) PokerDice: Fråga användaren vilka som ska slås om Vad behövs? En metod för att slå om enskilda tärningar. Räcker med en metod som kan slå om en specificerad tärning. public void roll(int i) { thedice[i-1].roll(); Fråga användaren (System.out.print) och läsa in ett antal tal. Scanner-uppgift!

(16 februari 2016 F5.27 ) Mer om klassen Scanner Två Scanner-metoder: int nextint() läser och returnerar ett heltal. Fel om de tecken som står på tur inte kan tolkas som ett heltal. boolean hasnextint() returnerar true om det som står på tur kan tolkas som ett heltal, annars false.

(16 februari 2016 F5.28 ) PokerDice: Fråga användaren vilka som ska slås om Vi kan läsa tal från den redan skapade scannern (scan) men svårt att veta hur många tal som ska läsas. Betydligt bättre: Läs in en hel rad med scan.nextline() Skapa ett nytt Scanner-objekt (säg linescanner) som kopplas till den inlästa raden (dvs till ett String-objekt). Tolka talen från raden med while-loopen: while (linescanner.hasnextint()) { int d = linescanner.nextint();...

(16 februari 2016 F5.29 ) PokerDice do {... System.out.print("Vilka ska slås om? "); answer = scan.nextline(); Scanner linescanner = new Scanner(answer); while (linescanner.hasnextint()) { pokerset.roll(linescanner.nextint()); pokerset.sort(); System.out.println(pokerSet);... while (!answer.equals("n")); Saknas: Felhantering!

(16 februari 2016 F5.30 ) Dialogrutor Klassen javax.swing.joptionpane har ett antal static-metoder för att kommunicera via dialogrutor. JOptionPane.showMessageDialog(null,"Ciao!");

(16 februari 2016 F5.31 ) Dialogrutor JOptionPane.showInputDialog(null, "Hur många?"); Metoden returnerar en sträng som man, t ex, kan koppla ett Scanner-objekt till.

(16 februari 2016 F5.32 ) Användning i PokerDice while (true) { pokerset.roll(); pokerset.sort(); String ans = JOptionPane.showInputDialog(null, pokerset + "\nvilka vill du slå om?"); if (ans==null) { break; Scanner scan = new Scanner(ans); while (scan.hasnextint()) { pokerset.roll(scan.nextint()); pokerset.sort(); JOptionPane.showMessageDialog(null, pokerset, "Resultat", JOptionPane.PLAIN_MESSAGE); Se eller hämta och testa den slutliga versionen av koden.

(16 februari 2016 F5.33 ) Arrayers styrkor och svagheter + Effektivt minnesutnyttjande + Snabb åtkomst till element med visst index + Snabb sökning om sorterat (med binär sökning eller hashteknik) Fix storlek Inlägg besvärligt om sorterat

(16 februari 2016 F5.34 ) Ett alternativ till arrayer: ArrayList En ArrayList är en arrayliknande struktur med följande egenskaper: Kan växa och krympa automatiskt Kan skjuta in nya element var som helst Kan ta bort element var som helst Kan använda index men en annan syntax än i arrayer Kan bara lagra objekt inte primitiva datatyper

(16 februari 2016 F5.35 ) Exempel ArrayList import java.util.arraylist; ArrayList<String> names; names = new ArrayList<String>(); Måste importeras Typen måste anges i deklarationen och i konstruktionen names.add("olle"); names.add("lisa"); names.add("lasse"); add lägger till sist System.out.println(names.get(1)); System.out.println(names); System.out.println("Size: " + names.size()); Lisa [Olle, Lisa, Lasse] Size: 3

(16 februari 2016 F5.36 ) Exempel ArrayList Der går att skjuta in, ändra och ta bort element. Exempel: names.add(1, "Anna"); System.out.println(names); names.set(2, "Britta"); System.out.println(names); names.remove(0); names.remove("lasse"); System.out.println(names); [Olle, Anna, Lisa, Lasse] [Olle, Anna, Britta, Lasse] [Anna, Britta]

(16 februari 2016 F5.37 ) Exempel ArrayList En ArrayList kan användas för att lagra godtyckliga objekt (av samma typ). Exempel: ArrayList<Turtle> turtles = new ArrayList<Turtle>(); ArrayList<Dice> dice = new ArrayList<Dice>(); ArrayList<int[]> intlists = new ArrayList<int[]>();

(16 februari 2016 F5.38 ) Omslagsklasser Hur gör man för att lagra t ex int eller double? Man använde omslagsklasserna Integer eller Double. Exempel: ArrayList<Integer> numbers = new ArrayList<Integer>(); for (int i = 0; i<=10; i++) { numbers.add(new Integer(i-5)); System.out.println(numbers); [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

(16 februari 2016 F5.39 ) Omslagsklasser: Hantering av objekten Integer io = numbers.get(7); System.out.println("Integer-objekt: " + io); int i = io.intvalue(); System.out.println("int-värde : " + i ); Integer-objekt: 2 int-värde : 2

(16 februari 2016 F5.40 ) Omslagsklasser: Automatiska konverteringar Autoboxing och autounboxing numbers.clear(); for (int i = 0; i<10; i++) { numbers.add(10-i); System.out.println(numbers); int s = 0; for (int i = 0; i<numbers.size(); i++) { s = s + numbers.get(i); System.out.println("Summan: " + s); [10, 9, 8, 7, 6, 5, 4, 3, 2, 1] Summan: 55