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

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

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

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

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

OOP Objekt-orienterad programmering

Föreläsning 3-4 Innehåll

Del A (obligatorisk för alla)

Objektorienterad Programmering (TDDC77)

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

OOP Objekt-orienterad programmering

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.

TENTAMEN OOP

Del A (obligatorisk för alla)

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 )

JAVAUTVECKLING LEKTION 7

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

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ält som funktionsresultat. Mer om fält: att uppdatera ett parameterfält. Kontrast: Parametrar av primitiv typ

Lektion 1, del b Utskrifter av variabelvärden Inläsning av värden till variabler

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

Föreläsning 9-10 Innehåll

Outline. I Vi kan lätt göra samma sak för fyra variabler... I Hur gör vi för 400 inlästa värden? I Ofta behöver man flera likadana variabler

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

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

Objektorienterad Programmering (TDDC77)

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

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

Tentamen OOP

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

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

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

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

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

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

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 7-8 Innehåll

Tentamen i Programmeringsteknik I

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

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

Chapter 4: Writing Classes/ Att skriva egna klasser.

OOP Objekt-orienterad programmering

Det finns en referensbok (Java) hos tentavakten 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

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

Föreläsning REPETITION & EXTENTA

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

OOP Objekt-orienterad programmering

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

TENTAMEN OOP

PROGRAMMERING-Java TENTAMINA

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Instuderingsfrågor, del D

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

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

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

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

OOP Objekt-orienterad programmering

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

Lite mer om Javas stöd för fält. Programmering. Exempel: vad är det största talet? hh.se/db2004. Fält samt Input/Output

Malmö högskola 2007/2008 Teknik och samhälle

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, EDAA20/EDA501 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

Skillnader mellan Python och Java

Föreläsning 2, vecka 8: Repetition

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

Input. Programmering. Andra källor

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

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

Sammanfattning och repetition utgående från typiska tentamensuppgifter

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

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

[] Arrayer = Indexerad variabel

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

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 i Programmeringsteknik I,, KandMa/Fy,

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

Parallellism, återblick

Objektorienterad programmering

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

PROGRAMMERING-Java Omtentamina

Datastrukturer. Föreläsning Innehåll. Program med vektor Exempel. Deklarera vektorer

EDAA20 Programmering och databaser. Mål komprimerat se kursplanen för detaljer. Om att lära sig programmera. Föreläsning 1-2 Innehåll.

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

Malmö högskola 2008/2009 CTS

TENTAMEN OOP

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

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

OOP Tenta

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

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

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

Tentamen i Programmeringsteknik I

Transkript:

(5 februari 2018 F4 1 ) Dagens föreläsning Sett i datorsalarna Mer om arrayer Matriser Formatering av utskrifter Inläsning med hjälp av Scanner-klassen Ett exempel med dialogrutor Java-doc Kommer först att titta på förra veckans m.voto.se/prog11

(5 februari 2018 F4 2 ) Hört och sett Uppgiften skriv en metod som returnerar... public void metod(...) {... System.out.println("Värdet är: " +...); Skall vara public typ metod(...) {... return...;

(5 februari 2018 F4 3 ) Sett vid redovisningar... d.getvalue(); System.out.println(d.getValue());... Första d.getvalue() meningslöst har ingen effekt!

(5 februari 2018 F4 4 ) Sett vid redovisningar public boolean ispair() { if (d1.getvalue() == d2.getvalue()) { return true; else { return false; Inget fel men enklare: public boolean ispair() { return d1.getvalue() == d2.getvalue();

(5 februari 2018 F4 5 ) Sett vid redovisningar Vad händer när nedanstående kod körs? int i = 1; while (i < 10); {... i = i + 1; Skriver nedanstående kod något? int x = 1; if (x < 0); { System.out.println("x är negativt");

(5 februari 2018 F4 6 ) Sett vid redovisningar Vad skrivs ut av int i = 1; i = i++; System.out.println(i); Vad får n för värde i dessa fall? i = 1; n = i + i++; i = 1; n = i++ + i; Råd: Använd operatorerna ++ och -- som självständiga satser

(5 februari 2018 F4 7 ) Klassen RandomArray i nätlektion 6 public class RandomArray { private int[] thearray; public RandomArray(int n, int limit) { thearray = new int[n]; randomize(limit); public RandomArray(int n) { this(n, 10); public RandomArray() { this(10); Tre konstruktorer. Kan anropa varandra. Kan anropa metoder.

(5 februari 2018 F4 8 ) Klassen RandomArray i nätlektion 6 public void randomize(int limit) { for (int i = 0; i<thearray.length; i++) { thearray[i] = (int)(math.random()*limit); Kan man skriva den med en for-each -sats? public void randomize(int limit) { for (int i : thearray) { i = (int)(math.random()*limit); Näää.

(5 februari 2018 F4 9 ) Klassen RandomArray i nätlektion 6 public class RandomArray { private int[] thearray; public RandomArray(int n, int limit) { thearray = new int[n]; randomize(limit); public RandomArray(int n) { this(n, 10); public RandomArray() { this(10); Vad blir resultatet av new RandomArray(5,10), new RandomArray(20) respektive new RandomArray()?

(5 februari 2018 F4 10 ) Klassen RandomArray i nätlektion 6 public String tostring() { String ret = ""; for (int i= 0; i< thearray.length; i++) { ret = ret + thearray[i]; if (i < thearray.length-1) { ret = ret + ", "; return "<" + ret + ">"; Kan tostring skrivas med en for-each -loop? Nej, det går inte att få kommatecken enbart mellan elementen. Däremot kan man skriva den så här: return java.util.arrays.tostring(thearray);)

(5 februari 2018 F4 11 ) Övning: En metod som vänder på arrayen Första variant: public void reverse1() { int n = thearray.length - 1; for (int i = 0; i <= n; i++) { int x = thearray[i]; thearray[i] = thearray[n-i]; thearray[n-i] = x; Kommentar? Demo reverse Fungerar ej! Byter ju tillbaka. Lösning: Stoppa loopen när hälften av elementen har bytts (mot den andra hälften).

Fungerar ej! Allt som görs i swap utförs bara lokalt - ingen påverkan på något utanför metoden! (5 februari 2018 F4 12 ) En swap-metod? public static void swap(int x, int y) { int t = x; x = y; y = t; Varför static? för användning i reverse: for (int i=0; i<thearray.length; i++) { swap(thearray[i], thearray[n-i]); i stället för for (int i=0; i<thearray.length; i++) { int x = thearray[i]; thearray[i] = thearray[n-i]; thearray[n-i] = x;

(5 februari 2018 F4 13 ) Annan swap private static void swap(int i, int j) { int x = thearray[i]; thearray[i] = thearray[j]; thearray[j] = x; public void reverse2() { int n = thearray.length - 1; for (int i=0; i<=n/2; i++) { swap(i, n-i); Demo swap Kan inte vara static eftersom den använder en instansvariabel. Varför private?

(5 februari 2018 F4 14 ) Alternativ reverse public void reverse3() { int n = thearray.length; int[] a = new int[n]; for (int i = 0; i < n; i++) { a[i] = thearray[n-1-i]; thearray = a; Vad händer?

(5 februari 2018 F4 15 ) Några frågor Antag RandomArray ra = new RandomArray(); Fungerar det att skriva int x = ra[3]? Fungerar det att skriva int x = ra.thearray[3]? Vad är skapas av nedanstående uttryck? new RandomArray(3) respektive new RandomArray[3] Är det någon mening att skriva en klass med bara en instansvariabel?

(5 februari 2018 F4 16 ) Annan design på reverse Låt metoden skapa och returnera ett nytt objekt: public RandomArray reverse4() { int n = thearray.length; RandomArray result = new RandomArray(n); for (int i = 0; i < n; i++) { result.thearray[i] = this.thearray[n-i-1]; return result;

(5 februari 2018 F4 17 ) Skapa ett RandomArray-objekt med en given array Antag att vi vill kunna skapa ett objekt med en given array, t ex: int a[] = {1, 2, 3, 4, 5, 6; RandomArray ra = new RandomArray(a); Behövs en till konstruktor: public RandomArray(int[] a) { thearray = a; Hur fungerar den? Är den bra?

(5 februari 2018 F4 18 ) Konstruktor med array-parameter Skapa ett eget array-objekt och kopiera värden från parametern till den: public RandomArray(int[] a) { thearray = new int[a.length]; for (int i = 0; i < a.length; i++) { thearray[i] = a[i]; Nu har klassen själv kontroll över vad som händer i arrayen. Det är dock inte säkert att man alltid vill ha det så!

(5 februari 2018 F4 19 ) Tvådimensionella arrayer matriser En matris är en array där elementen är arrayer: m 3 11 5 7 1 2 4 0 Kan skapas med medan int[][] m = { {3, 11, 5, 7, {1, -2, 4, 0, {6, 7, 2, -9 ; int[][] m = new int[3][4]; skapar en 3x4 matris med nollor. 6 7 2 9

(5 februari 2018 F4 20 ) Exempel: Statistik på tärningspar public class PairOfDice { private Dice d1; private Dice d2; public PairOfDice() { this(6,6); public PairOfDice(int n1, int n2) { d1 = new Dice(n1); d2 = new Dice(n2); public int getvalue1() { return d1.getvalue(); public int getvalue2() { return d2.getvalue();... public int[] roll() { d1.roll(); d2.roll(); return new int[]{d1.getvalue(), d2.getvalue();

Statistikklassen public class PoDStatistics { public static void main(string[] args){ PairOfDice pod = new PairOfDice(4, 8); int[][] freq = new int[4][8]; for (int i = 1; i<=1000000; i++) { pod.roll(); freq[pod.getvalue1()-1][pod.getvalue2()-1]++; for (int i= 0; i<4; i++) { for (int j=0; j<8; j++) { System.out.print(freq[i][j] + " "); System.out.println(); Demo PoDStatistics (5 februari 2018 F4 21 )

(5 februari 2018 F4 22 ) Kommunikation med användaren Utskrifter i terminalfönster ( konsolen ). Gjort med System.out.print och System.out.println. Ska visa på bättre möjligheter att redigera utskrifterna (t ex ange antal decimaler) med format-metoden. Tolka ( läsa in ) information som användaren skriver i terminalfönstret. Ska visa på användning av Scanner-klassen. Dialog-rutor är ett alternativ till att använda konsolen. Grafiska användargränssnitt ( GUI ). Ni såg ett mycket litet exempel på detta på den förra föreläsningens klickbara tärning.

(5 februari 2018 F4 23 ) Utskrift med println Exempel: Koden int x = 10; double sinx = Math.sin(x); double expx = Math.exp(x); System.out.println("x = " + x + ", sin(x) = " + sinx + ", exp(x) = " + expx); resulterar i utskriften x = 10, sin(x) = -0.5440211108893698, exp(x) = 22026.465794806718

(5 februari 2018 F4 24 ) Utskrift med format int x = 10; double sinx = Math.sin(x); double expx = Math.exp(x); System.out.format("x = %d, sin(x) = %7.4f, cos(x) = %10.4e\n", x, sinx, expx); resulterar i utskriften x = 10, sin(x) = -0.5440, cos(x) = 2.2026e+04 i stället för x = 10, sin(x) = -0.5440211108893698, exp(x) = 22026.465794806718

(5 februari 2018 F4 25 ) format-metoden format(s, p 1, p 2,..., p n ) skapar ett String-objekt utifrån strängen s. Strängen s ska innehålla formatkoder en för var och en de övriga parametrarna. Varje formatkod byts mot värdet av motsvarande parameter. Exempel på formatkoder: %d plats för ett heltal %10d heltal i ett fält om 10 positioner, högerjusterat %-10d heltal i ett fält om 10 positioner, vänsterjusterat %8.2f flyttal i ett fält om 8 positioner, 2 decimaler %12.3e flyttal i ett fält om 12 positioner, 3 decimaler på exponentform %12s flyttal i ett fält om 12 positioner, högerjusterat %-12s flyttal i ett fält om 12 positioner, vänsterrjusterat %c teckenvärde (char)

(5 februari 2018 F4 26 ) format-metoden Radbyte format("x = %d, sin(x) = %7.4f, cos(x) = %10.4e \n", x, sinx, expx ) Metoden format finns, förutom i System.out, som klassmetod i String. Exempel: String name = "Kalle Kula"; int age = 36; String str = String.format("%s är %d år", name, age); kommer att ge str värdet Kalle Kula är 36 år

(5 februari 2018 F4 27 ) Klassen Scanner Metoden format är (ett) sätt att omvandla tal mm till text. För att gå åt andra hållet dvs omvandla text ( strömmar av tecken ) till tal mm. kan Scanner-klassen användas. Exempel: Scanner scan = new java.util.scanner(system.in); System.out.print("Antal sidor: "); int sides = scan.nextint(); System.out.print("Antal slag : "); int rolls = scan.nextint();... Demo ScannerDemo1 Normalt importeras klassen med satsen import java.util.scanner. Då behöver man inte ange java.util när man refererar klassen.

(5 februari 2018 F4 28 ) Metoder i Scanner int nextint() double nextdouble() läs och returnera nästa heltal läs och returnera nästa flyttal Dessa metoder läser förbi eventuella blanktecken och radslut. Om det inte går att tolka nästa grej som den typ man efterfrågar avbryts programmet. För att hantera detta kan man testa med metoderna: boolean hasnextint() boolean hasnextdouble() true om OK att anropa nextint true om OK att anropa nextdouble Demo ScannerDemo2

(5 februari 2018 F4 29 ) Metoder i Scanner För att läsa annat än tal: String next() String nextline() boolean hasnext() boolean hasnextline() läs och returnera nästa tok ( grej ) läs och returnera nästa rad true om det finns något icke-blankt att läsa true om det finns en rad att läsa Viktigt att veta att nextline() läser resten av raden. next, nextint och nextdouble byter inte rad efter fullbordad läsning. Ställer lätt till trassel vid blandning av rad- och talläsning.

(5 februari 2018 F4 30 ) Exempel Nedanstående kod är tänkt att först läsa ett tal och sedan en hel rad. public class ScannerDemo3 { public static void main(string[] s) { Scanner scan = new Scanner(System.in); System.out.print("Tal : "); int n = scan.nextint(); System.out.print("Text: "); String txt = scan.nextline(); System.out.println("Tal : " + n); System.out.println("Text: " + txt); Demo ScannerDemo3 Måste byta rad med ett nextline innan nästa rad kan läsas.

(5 februari 2018 F4 31 ) Exempel: Läs rader och summera talen på varje rad för sig Så här Scanner scan = new Scanner(System.in); while (scan.hasnextline()) { int sum = 0; while (flera tal på raden ) { sum += scan.nextint(); System.out.println(sum);? Det finns inget enkelt sätt att se om det finns flera tal på raden. Bättre att läsa rad för rad till en String och koppla ett nytt Scanner-objekt till detta.

Exempel: Läs rader och summera talen på varje rad för sig import java.util.scanner; public class ScannerDemo4 { public static void main(string[] args) { Scanner scan = new Scanner(System.in); Demo while (scan.hasnextline()) { String line = scan.nextline(); Scanner linescan = new Scanner(line); int sum = 0; while (linescan.hasnextint()) { sum += linescan.nextint(); linescan.close(); // Bra att göra... System.out.println(sum); scan.close(); // Bra att göra... (5 februari 2018 F4 32 )

(5 februari 2018 F4 33 ) Användning av dialogrutor Klassen JOptionPane innehåller (bl. a.) ett antal klassmetoder för att göra så kallad dialogrutor. Demonstreras i klassen PairOfDiceStatisticsDialog. Demo Detta har åstadkommits med tre olika klassmetoder: void JOptionPane.showMessageDialog(...) String JOptionPane.showInputDialog(...) int JOptionPane.showConfirmDialog(...)

(5 februari 2018 F4 34 ) JOptionPane-metoderna JOptionPane.showMessageDialog(null, "Starta?") void- metod. Hänger tills man trycker OK.

(5 februari 2018 F4 35 ) JOptionPane-metoderna JOptionPane.showInputDialog(null, "Antal slag?") Returnerar ett String-objekt. Kan tolkas t ex med ett Scanner-objekt (även om egentligen ett annat sätt vore att föredra)

(5 februari 2018 F4 36 ) JOptionPane-metoderna JOptionPane.showConfirmDialog(null, "Igen?") Returnerar ett heltal beroende på vilket alternativ man klickat. Ja ger 0. Det finns flera olika parameteruppsättningar för att anpassa rutorna.

(5 februari 2018 F4 37 ) I koden import javax.joptionpane; import java.util.scanner; public class PoDStatisticsDialog { public static void main(string[] args){... JOptionPane.showMessageDialog(null, "Starta?"); do { String answer = JOptionPane.showInputDialog(null, "Antal slag?"); int number = new Scanner(answer).nextInt(); Brutalt for (int i = 1; i <= number; i++) {... for (int i= 0; i < 4; i++) {... System.out.println(); // Roll and // print as before while (JOptionPane.showConfirmDialog(null, "Igen?") == 0); Passar på att introducerade do satsen...

(5 februari 2018 F4 38 ) Javadoc ett sätt att producera dokumentationssidor /** * Represents a pair of dice * @version 2018-02-05 * @author Tom Smedsaas */ public class PairOfDice { private Dice d1; private Dice d2; /** * Creates of pair of dice with a specified number of sides * @param n1 number of sides of the first dice * @param n2 number of sides of the second dice */ public PairOfDice(int n1, int n2) {... /** * Roll the dice * @return An array with the values */ public int[] roll() {...