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

Relevanta dokument
Dagens program. Programmeringsteknik och Matlab. Viktiga datum. Ett första exempel. Programmall, vad behöver vi i ett javaprogram?

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

Administrativt. Programmeringsteknik för I1. Dagens program. Objektorienterad programmering

Kort repetition. Programmeringsteknik för Bio1 och I1. Vad ska vi lära oss idag? Ett exempel

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

Föreläsning REPETITION & EXTENTA

Föreläsning 3-4 Innehåll

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.

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

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 program. Programmeringsteknik och Matlab. Administrativt. Viktiga datum. Kort introduktion till matlab. Övningsgrupp 2 (Sal Q22/E32)

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

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Grundläggande programmering, STS 1, VT Sven Sandberg. Föreläsning 12

TDDC77 Objektorienterad Programmering

OOP Objekt-orienterad programmering

Chapter 4: Writing Classes/ Att skriva egna klasser.

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

Skriftlig tentamen för kursen DV017A. Inledande programmering i Java A

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Klassdeklaration. Metoddeklaration. Parameteröverföring

F4. programmeringsteknik och Matlab

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

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

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

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

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

Del A (obligatorisk för alla)

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

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

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

Föreläsning 2, vecka 8: Repetition

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.

Föreläsning ALGORITMER: SÖKNING, REGISTRERING, SORTERING

Objektorienterad programmering i Java

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

TENTAMEN OOP

Idag ska vi gå igenom. Programmeringsteknik för S, 2004 Grupp IV. Vad är en klass? Klasser och instanser

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

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

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

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

Typkonvertering. Java versus C

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

TENTAMEN OOP

Del A (obligatorisk för alla)

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

[] Arrayer = Indexerad variabel

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

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

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

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

Kompilera och exekvera Javakod

Föreläsning 5-6 Innehåll

Arrayer (fält)

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

Uppgiften är att beskriva en kvadrat i ett Java program. En första version av programmet skulle kunna se ut så här:

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

Planering Programmering grundkurs HI1024 HT 2014

Föreläsning 9-10 Innehåll

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

TENTAMEN OOP

Tentamen OOP

Idag. Exempel, version 2. Exempel, version 3. Ett lite större exempel

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

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

Föreläsning 1 & 2 INTRODUKTION

Föreläsning 11. Arrayer. Arrayer. Arrayer. Lagrar flera värden av samma typ Kan vara primitiva typer eller objekt. Kan ha en array av t.

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

Det är principer och idéer som är viktiga. Skriv så att du övertygar examinatorn om att du har förstått dessa även om detaljer kan vara felaktiga.

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

Kungl. Tekn. Högskolan Förel 1, bild 1 Föreläsning 1: Introduktion ffl Kursinnehåll ffl Javarepetition ffl Referenser ffl Nyckelordet static ffl Klass

Programmering för språkteknologer II, HT2011. Rum

D0010E. Hello world! Nedräkning. Sågtand. Övningsuppgifter i Eclipse. Skapa ett program som skriver ut "Hello world" på skärmen.

Föreläsning 1 & 2 INTRODUKTION

Instuderingsfrågor, del D

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

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

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

Mer källkod. Styrstrukturer Val Slingor Operatorer Källkodsexempel med minne. Erik Forslin. Rum 1445, plan 4 på Nada

Klasser i Java kan ha metoder och egenskaper. Metoder beskriver funktioner som klassen kan utföra. Egenskaper beskriver innehållet i klassen.

Laboration A Objektsamlingar

Tentamen i Programmering

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 3: Typomvandling, villkor och val, samt textsträngar

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

Laboration 1 - Grunderna för OOP i Java

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

DAT043 Objektorienterad programmering för D, DIT011 Objektorienterad programvaruutveckling för GU

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

Föreläsning 10 OM DELMÅLSKONTROLLEN ; VARIABLERS SYNLIGHET STRING OCH STRINGBUILDER

Kort om klasser och objekt En introduktion till GUI-programmering i Java

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

Anteckningar 1: Grundläggande saker

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

Objektorienterad Programmering (TDDC77)

Transkript:

Programmeringsteknik och Matlab Övning 3 Dagens program Övningsgrupp 2 (Sal Q22/E32) Johannes Hjorth hjorth@nada.kth.se Rum 4538 på plan 5 i D-huset 08-790 69 02 Kurshemsida: http://www.nada.kth.se/kurser/kth/2d1312 Övningsanteckningar: http://www.nada.kth.se/ hjorth/teaching/prgi05 Repetition av if/else, for, while och Scanner Switch-satser, när är de användbara? Hur skickar man parametrar från kommandoraden? Två typer av variabler; primitiva och referens Hur skapar vi funktioner och hur anropar vi dem? Vad är call by value och call by reference? Hur får vi vår funktion att retunera ett värde? Hur hanterar vi stora mängder data? Kort sorteringsexempel Vad är Java APIn bra för? Viktiga datum Repetitionsexempel 2005-09-30 Sista dagen för redovisning av Lab4 med bonus. 2005-10-04 Inlämning av frivilliga Hemtal 2 i Java. Hur hade koden nedan sett ut om vi hade använt en for-slinga istället för en while-loop? public class Elefanter { Scanner s = new Scanner(System.in); System.out.println("Skriv ett stort tal: "); int storttal = s.nextint(); if(storttal < 0) System.out.println("Kallar du det stort?!"); int ctr = 1; while(ctr <= storttal) { if(ctr < 2) System.out.println("En elefant spatserade,\n" +"\n" +"det tyckte han var så intressant\n" +"så han gick och hämtade en annan elefant."); else System.out.println(ctr + " elefanter spatserade,\n" +"\n" +"\n" +""); ctr++;

Vi kör Elefanter.java switch-satser Vi kompilerar och kör vårt nyskrivna program: >javac Elefanter.java >java Elefanter Skriv ett stort tal: 20050927 En elefant spatserade, det tyckte han var så intressant så han gick och hämtade en annan elefant. 2 elefanter spatserade, 3 elefanter spatserade,... 20050925 elefanter spatserade, 20050926 elefanter spatserade, 20050927 elefanter spatserade, En switch-sats kan vara bra när vi vill ha mer än de två alternativ som en if/else-sats erbjuder. public class EttTvåTre { public static void main(string[] inp) { Scanner scan = new Scanner(System.in); System.out.println("Välj en siffra: 3 för ja, 7 för nej"); int tal = scan.nextint(); switch(tal) { case 3: System.out.println("Ja ja..."); break; case 7: System.out.println("Nehe..."); break; default: System.out.println("Du skulle valt 3 eller 7"); Här fångas alla fall som inte passar in i någon av case-satserna upp av default. Grymt hållbar spindeltråd... Vi kör EttTvåTre.java Kör java med extra parametrar Först kompilerar vi koden: >javac EttTvåTre.java Ibland vill vi skicka parametrar direkt till vårt program genom att skriva: java Fakultet 7 Sedan kör vi programmet: >java EttTvåTre Välj en siffra: 3 för ja, 7 för nej 3 Ja ja... >java EttTvåTre 7 Välj en siffra: 3 för ja, 7 för nej Nehe... >java EttTvåTre Välj en siffra: 3 för ja, 7 för nej 1337 Du skulle valt 3 eller 7 Vi kompilerar bara programmet en gång med javac, sen kan vi köra det hur många gånger vi vill. Följande program kan läsa parametern 7: public class Fakultet{ int fak = 1, tal; if(args.length < 1) { System.out.println("java Fakultet <siffra>"); System.exit(0); // Ta första argumentet och tolka det som ett heltal tal = Integer.parseInt(args[0]); for(int i = 0; i < tal; i++) fak = fak * i; System.out.println(tal + "! = " + fak); Här är args inparametern till main. Vi kunde kallat den för något annat. Den innehåller bland annat sjuan vi vill åt.

Någonting blev fel... Hur använder vi klassmetoder? När vi kör vårt exempel blir något fel, trots att kompilatorn inte klagar! >javac Fakultet.java >java Fakultet 7 7! = 0 Vad har vi gjort för fel i Fakultet.java? Är det ett... Kompileringsfel Exekveringsfel Logisktfel Det finns faktiskt två fel i beräkningen av fakultet, kan ni hitta det andra också? I exemplet nedan skapar vi en metod som heter enmetod(). Hur tolkar datorn programmet? public class Metodanrop { double x = 1.0; // Är detta en lokal variabel? System.out.println("Nu körs main: x = " + x); enmetod(); // Här gör vi ett metodanrop System.out.println("Vi är tillbaka: x = " + x); public static void enmetod() { int x = 2; // Lokal variabel! System.out.println("Nu körs enmetod: x = " + x); Vi kör koden: >javac Metodanrop.java >java Metodanrop Nu körs main: x = 1.0 Nu körs enmetod: x = 2 Vi är tillbaka: x = 1.0 En lokal variabel syns bara mellan de närmast yttre måsvingarna som omringar den. Två typer av variabler Olika typer av parametrar till metoder Primitiva variabler 13 "En elefant spatserade på en liten liten spindel tråd, det tyckte den var Referensvariabel så intressant, så den 7 gick och hämtade en annan elefant." 112 Det finns två typer av variabler: Primitiva variabler innehåller värdet själva. Referensvariabler pekar på den intressanta datan som ligger någon annanstans. Till exempel är int och double primitiva variabler, medan String är en referensvariabel. Varför är detta viktigt...? Spelar det någon roll om vi anropar en metod med en primitiv variabel eller en referensvariabel? public class OlikaTyper { int x = 3; StringBuffer s = new StringBuffer("tre"); System.out.println("FÖRE: x = " + x + ", s = " + s); byttal(x); // metodanrop med primitiv variabel ändrasträng(s); // metodanrop med referensvariabel System.out.println("EFTER: x = " + x + ", s = " + s); public static void byttal(int a) { a = 7; // vi ändrar värdet på a till 7 public static void ändrasträng(stringbuffer b) { b.append("tio"); // vi lägger till "tio" till b I exemplet ovan är int en primitiv variabel och StringBuffer en referensvariabel. Vad har x och s för värden efter metodanropen?

Vi kör OlikaTyper.java Metoder kan returnera ett svar >javac OlikaTyper.java >java OlikaTyper FÖRE: x = 3, s = tre EFTER: x = 3, s = tretio Vad hände? Vid metodanropet byttal(x) kopieras värdet i x till a. När vi sedan ändrar i a påverkas inte x. Referensvariabler är pekare. När vi anropar metoden ändrasträng(s) så kopierar vi pekaren i s till b. Nu pekar både s och b till samma plats i minnet. En metod som inte returnerar ett svar står det void framför. Vill vi däremot att den ska returnera ett heltal skriver vi int. Returnerar den en sträng skriver vi istället String framför metoden. public class ReturneraSvar { public static void main(string args[]) { String fras = "När förändringens vindar blåser,\n" +"bygger somliga vindskydd,\n" +"andra väderkvarnar."; System.out.println(fras); int x = getal(); System.out.println(x); x = 3 s System.out.println(småBokstäver(fras)); a = 7 Primitiva variabler Referensvariabler b "tretio" När vi ändrar i det som s och b pekar på, kommer båda två att se ändringen efteråt. public static int getal() { return (int) Math.floor(6*Math.random()+5); // (int) betyder att vi tolkar resultatet som ett heltal public static String småbokstäver(string s) { return s.tolowercase(); Sist i metoden skriver vi return följt av svaret. Vi kör ReturneraSvar.java Ett lite mer avancerat exempel Vi kompilerar som vanligt med javac och kör därefter programmet: >javac ReturneraSvar.java >java ReturneraSvar När förändringens vindar blåser, bygger somliga vindskydd, andra väderkvarnar. 7 när förändringens vindar blåser, bygger somliga vindskydd, andra väderkvarnar. Varje gång slumpas ett heltal mellan 5 och 10 fram. Nu har vi modifierat vårt tidigare program så att det använder sig av en klassmetod fakultet. public class MerFakultet{ int tal; if(args.length < 1) { // Hur många inparametrar? System.out.println("java Fakultet <tal>"); System.exit(0); // Avsluta programmet for(int i = 0; i < args.length; i++) { tal = Integer.parseInt(args[i]); // Tolka som heltal System.out.println(tal + "! = " + fakultet(tal)); public static int fakultet(int tal) { int fak = 1; for(int i = 1; i <= tal; i++) fak = fak * i; return fak; Med hjälp av args.length kollar vi hur lång args är, så vi vet hur många varv vi ska köra i loopen.

Vi kör MerFakultet.java Hur hanterar vi stora mängder data? Vi kompilerar och kör MerFakultet.java, notera att den nu klarar av flera inparametrar. >javac MerFakultet.java >java MerFakultet 0 2 7 0! = 1 2! = 2 7! = 5040 Vi ser att det är bra att använda metoder när vi gör samma sak flera gånger. Koden blir kortare och mer lättläst, mindre risk för fel. Observera också att tack vare args.length så klarar programmet av valfritt antal parametrar. Hur gör vi om vi vill lagra 100 olika värden, har vi då hundra olika variabler eller finns det ett bättre sätt? Dags för arrayer och klassen ArrayList. Vad är skillnaden mellan de två? Vilken ska vi välja? Hur använder vi dem? Vi kommer se hur man kan återanvända kod. Mindre kod att skriva, färre ställen att göra fel på, det går alltså fortare att skriva programmen. Introduktion till arrayer Hur når vi de olika elementen? Med arrayer kan vi använda ett variabelnamn till att lagra flera olika värden. Variabeln x innehåller bara ett värde, men hur gör vi om det ligger 10 olika värden i arrayen a? När vi arbetar med arrayer kommer vi ofta också att använda oss av for-loopar. int x; x Arrayer och for-loopar hör ihop! int[] a = new int[10]; För att skapa en variabel brukar vi skriva, int x = 0; a[0] a[1] a[2] a[9] För att istället skapa en array skriver vi, int[] a = new int[10]; Hur ska raden tolkas? Hakparenteserna efter int säger att det är en array och med new skapar vi här plats för 10 heltal. Vi numrerar positionerna för att skilja dem åt! Första elementet, som vi säger har index noll, når man med int x = a[0]; Här har vi angivit indexet innanför hakparenteserna.

Arrayer och for-loopar Arrayer räcker inte alltid... Arrayer kombineras med fördel med for-loopar Om vi vill sätta alla element i a till 17 skriver vi for(int i = 0; i < a.length; i++) { a[i] = 17; Eftersom a.length är lika med antalet element i arrayen a kommer vi att stegvis öka i tills vi har stegat igenom alla element. Första elementet har index 0 och sista elementet har index length - 1. Det går även att skapa arrayer med String och andra klasser. När vi använder arrayer måste vi på förhand bestämma hur många element som ska få plats. String[] badorter = new String[5]; Vad händer om vi plötsligt behöver lägga till ytterligare ett element? Problem! badorter[5] = "Novosibirsk"; Exception in thread "main" java.lang.arrayindexoutofboundsexception: 5 at Badhus.main(Compiled Code) Vore det inte smidigt om vi slapp oroa oss för hur många element som fick plats? Det finns ett sätt... Vi använder klassen ArrayList istället! Dokumentation - Java API Klassen ArrayList kan öka sin storlek vid behov! För att kunna använda ArrayList behöver vi skriva Vi skapar en ArrayList genom att skriva, ArrayList badorter = new ArrayList(); För att lägga till ett element skriver vi badorter.add("novosibirsk"); För att titta på tredje elementet skriver vi String semesterort = (String) badorter.get(2); Eftersom ArrayList kan innehålla objekt av olika typ måste vi berätta att det är en String vi hämtar, vilket vi gör genom att skriva (String). Genom att klicka på ArrayList får vi snabbt upp dokumentationen om alla metoder i ArrayList. Lite längre ner på sidan finns en mer utförlig beskrivning av vad varje metod gör. http://java.sun.com/j2se/1.5.0/docs/api/

Ett större ArrayList exempel Vi kör programmet Genom att skriva <String> säger vi att vår ArrayList bara får innehålla strängar. public class SorteraNamn { static ArrayList<String> namnlista = new ArrayList<String>(); fråganamn(); //Metodnamnet beskriver vad metoden gör sorteranamn(); skrivutnamn(); static void fråganamn() { System.out.println("Ge några namn, avsluta med tom rad."); >javac SorteraNamn.java >java SorteraNamn Ge några namn, avsluta med tom rad. Kalle Lars Anna Sorterar... Anna Kalle Lars Scanner scan = new Scanner(System.in); String namn = scan.nextline(); while(namn.length() > 0) { namnlista.add(namn); namn = scan.nextline(); Notera hur enkelt det var att sortera strängarna med hjälp av metoden Collections.sort(). static void sorteranamn() { System.out.println("Sorterar..."); Collections.sort(namnlista); static void skrivutnamn() { for(int i = 0; i < namnlista.size(); i++) System.out.println(namnlista.get(i)); Nu har vi allt vi behöver till nästa labb och hemtal... Vi kan skapa och anropa metoder Vi kan hantera arrayer och klassen ArrayList Vi behärskar parametrar och returvärden Vi kan namnge de tre olika typerna av fel Vi vet skillnaden på primitiva variabler och referensvariabler samt hur de fungerar som parametrar vid metodanrop Fråga om det är något ni är osäkra på!