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

Relevanta dokument
Föreläsning 3-4 Innehåll

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

Föreläsning 5-6 Innehåll

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

Föreläsning 9-10 Innehåll

Programexempel: tärningsspel. Programexempel: tärningsspel Kasta tärning tills etta. Klassen Die Specifikation. Slumptalsgenerator Klassen Random

Föreläsning REPETITION & EXTENTA

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

Föreläsning 1 & 2 INTRODUKTION

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

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

Föreläsning 1 & 2 INTRODUKTION

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 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Typkonvertering. Java versus C

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

Algoritmexempel. Föreläsning 5-7 Innehåll. Summering Mönster. Summering Exempel: alternerande harmoniska serien

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

Programmering A. Johan Eliasson

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

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

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

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

2D1342 Programkonstruktion för F1, ht 2006

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

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

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]

Tentamen OOP

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

2D1339 Programkonstruktion för F1, ht 2004

Namn: Personnr: 1 2D1310 Programmeringsteknik i Java för B,V (1p) 13 januari 2001, kl Hjälpmedel: En Javabok. För betyget godkänt krävs at

OOP Objekt-orienterad programmering

2 b) Följande finns definierat: public class Käk String titel = "Chili con carne"; Krydda[] kryddor = new Krydda[10]; kryddor[0] = new Krydda("Svartpe

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

2D1339 Programkonstruktion för F1, ht 2003

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

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

Översikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning

Föreläsning 2, vecka 8: Repetition

2 b) Bodega bodegan = new Bodega(); double moms = 0.235; String namn = "Vargtass"; System.out.println(namn + " " + moms + bodegan.ändra(moms, namn); S

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 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

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

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

Föreläsning 1-2 innehåll

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

Föreläsning 7-8 Innehåll

Exempel på program med objekt Klass med main-metod. Föreläsning 3-4 Innehåll. Övning Viktiga begrepp

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

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?

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

2D1339 Programkonstruktion för F1, ht 2003

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

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

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

OOP Objekt-orienterad programmering

SMD 134 Objektorienterad programmering

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

TDIU01 - Programmering i C++, grundkurs

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

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

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

Java, klasser, objekt (Skansholm: Kapitel 2)

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

JAVAUTVECKLING LEKTION 8

Instuderingsfrågor, del D

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

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

Parameteröverföring. Exempel. Exempel. Metodkropp

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

JAVAUTVECKLING LEKTION 4

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

Del A (obligatorisk för alla)

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

Grundläggande programmering med C# 7,5 högskolepoäng

TDIU01 - Programmering i C++, grundkurs

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

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: Booleans, if, switch

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

TDDC77 Objektorienterad Programmering

Tentamen ID1004 Objektorienterad programmering April 7, 2015

Föreläsning 5 Innehåll

Del A (obligatorisk för alla)

2 b) Följande finns definierat: import java.awt.*; public class Uppgift1b public static void main(string[] mupp) Color färg = Color.blue; Bil[] bilar

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. Erik Forslin. Rum 1445, plan 4 på Nada

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Tentamen ID1004 Objektorienterad programmering December 15, 2012

Iteration while-satsen

Föreläsning 13 Innehåll

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.

Föreläsning 5 Innehåll. Val av algoritm och datastruktur. Analys av algoritmer. Tidsåtgång och problemets storlek

DD1342 Programkonstruktion för F1, ht 2007

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

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

Transkript:

Föreläsning 3-4 Innehåll Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer public class Asterisks { System.out.println("Antal: "); int n = scan.nextint(); System.out.print( * ); System.out.println(); Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 2 / 36 Programexempel med metod Metod public class Asterisks { System.out.println("Antal: "); int n = scan.nextint(); Asterisks.printAsterisks(n); // eller bara // printasterisks(); // om metoden finns i samma klass System.out.print( * ); System.out.println(); returtyp namn System.out.print('*'); System.out.println(); parameter satser som utförs då metoden exekveras Datavetenskap (LTH) Föreläsning 3-4 HT 2017 3 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 4 / 36

Parametrar Parametrar Parametrarna deklareras i metodens parameterlista. Parametrarna är bara åtkomliga inuti metoden. Parametrarna skapas då metoden anropas och försvinner när metoden är färdigexekverad. Argumenten kopieras vid anropet in i motsvarande parametrar. Modifierare för metoder public Metoden kan även användas utanför klassen. private Metoden kan bara användas inuti klassen. Deklaration av parameter typ och namn static Metoden hör till klassen och anropas inte på något objekt. n 5 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 5 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 6 / 36 Diskutera Returtyp Hur ska man ändra programmet nedan så att det skriver ut en godtycklig text ett önskat antal ggr? public class Asterisks { System.out.println("Antal: "); int n = scan.nextint(); Asterisks.printAsterisks(n); System.out.print( * ); System.out.println(); void betyder att metoden inte returnerar något värde. Om metoden returnerar ett värde ska den ha en datayp (int, double, String,) som returtyp. Metoden måste då också ha (minst) en return-sats. private static double calculatearea(double radius) { return Math.PI * radius * radius; Datavetenskap (LTH) Föreläsning 3-4 HT 2017 7 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 8 / 36

Metoder som returnerar värden Programexempel Konstanter public class CircleProgram { System.out.println("Radie: "); double radius = scan.nextdouble(); System.out.println("Area: " + calculatearea(radius)); System.out.println("Omkrets: " + calculatecircumference(radi public static double calculatearea(double radius) { return Math.PI * radius * radius; public static double calculatecircumference(double radius) { return 2 * Math.PI * radius; I klassen Math finns konstanten Math.PI: public static final double PI = 3.14159265358979323846; Man kan deklarera egna konstanter för värden som inte ska ändras. static final int NBR_CARDS = 52; final betyder att värdet inte får ändras Datavetenskap (LTH) Föreläsning 3-4 HT 2017 9 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 10 / 36 Exekvering och metodanrop Ett anrop av en metod innebär att exekveringen fortsätter med den första satsen i den anropade metoden. När den anropade metoden är klar återupptas exekveringen i den metod där anropet gjordes. Block Block Satser som hör ihop. Omges av klammerparenteser { public static void main { public int getarea(int radius) { public class Asterisks { // Satserna i en klass getarea(); // Satserna i en metod Datavetenskap (LTH) Föreläsning 3-4 HT 2017 11 / 36 // Satser som utföras i en for-sats Datavetenskap (LTH) Föreläsning 3-4 HT 2017 12 / 36

Kommentar Kommentar Metoder ska egentligen ha dokumentationskommentarer som beskriver: vad metoden gör. vad parametrarna används till. /** Skriver ut en rad med n st asterisker. */ eller mer noggrant (med javadoc-taggar) /** * Skriver ut en rad med n st asterisker. * * @param n * antal asterisker som ska skrivas ut */ Datavetenskap (LTH) Föreläsning 3-4 HT 2017 13 / 36 Logiska uttryck Övning Skriv klart metoden iseven. public class EvenNumbers { System.out.println("Skriv ett heltal: "); int n = scan.nextint(); if (iseven(n)) { System.out.println(n + " är ett jämnt tal."); else { System.out.println(n + " är ett udda tal."); private static boolean iseven(int n) { Datavetenskap (LTH) Föreläsning 3-4 HT 2017 14 / 36 Relationer Logiska uttryck används bland annat som villkor i if- och while-satser: if (x < 5) { while (true) { Logiska uttryck kan ha två möjliga värden, true eller false. Variabler av typen boolean kan tilldelas logiska uttryck: boolean ok = true; ok = false; ok = x < 5; Ett logiskt uttryck kan vara en relation där man jämför värdet av två uttryck: x < 5 Relationsoperatorer: < <= == lika med >= >!= skilt från Datavetenskap (LTH) Föreläsning 3-4 HT 2017 15 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 16 / 36

Logiska operatorer de Morgans lagar Logiska uttryck kan kopplas samman med operatorerna:! icke && och eller xtillhörintervallet[5,10] x >= 5 && x <= 10 xtillhörinte intervallet [5, 10] x < 5 x > 10 Ett och-uttryck är true om alla deluttryck har värdet true. Ett eller-uttryck är true om minst ett av deluttrycken har värdet true. Antag att A och B är två logiska uttryck. Då gäller! (A && B) motsvarar! A! B! (A B) motsvarar! A &&! B Att x tillhör intervallet [5, 10] kan skrivas x >= 5 && x <= 10 Att x inte tillhör intervallet [5, 10] är negationen till ovanstående:! (x >= 5 && x <= 10) Men det kan förenklas till: x < 5 x > 10 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 17 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 18 / 36 Diskutera Betrakta följande program: public class Minimum { System.out.println("Skriv två heltal: "); int n1 = scan.nextint(); int n2 = scan.nextint(); System.out.println("Minsta talet är " + min(n1, n2)); public static boolean min(int n1, int n2) { if (n1 < n2) { return n1; else { return n2; Hur ska vi göra om indata består av ett godtyckligt antal tal? Datavetenskap (LTH) Föreläsning 3-4 HT 2017 19 / 36 Sök minsta talet Mönster Uppgift: Beräkna det minsta talet i en följd av tal. Lösning: Deklarera en variabel min som ska hålla reda på det hittills minsta värdet. Låt min få ett stort startvärde. Gå sedan igenom talen och jämför med min. Uppdatera min ifall det aktuella talet är mindre. Algoritmen i pseudokod: min = "stort värde"; för alla värden { value = "nästa värde"; if (value < min) { min = value; Datavetenskap (LTH) Föreläsning 3-4 HT 2017 20 / 36

Sök minsta talet Exempel Konstanter för minsta och största tal public class ComputeMin { int min = Integer.MAX_VALUE; while (scan.hasnextint()) { int nbr = scan.nextint(); if (nbr < min) { min = nbr; System.out.println("Minsta talet är " + min); Konstanter för minsta respektive största värde: int i1 = Integer.MIN_VALUE; // -2147483648 int i2 = Integer.MAX_VALUE; // 2147483647 double d1 = Double.MIN_VALUE; // 4.9E-324 (OBS! minsta möjliga positiva heltal) double d2 = Double.MAX_VALUE; // 1.8E308 double d3 = -Double.MAX_VALUE // -1.8E308 Med E menas gånger 10 upphöjt till Datavetenskap (LTH) Föreläsning 3-4 HT 2017 21 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 22 / 36 Beräkna maximum Mönster Uppgift: Beräkna det största talet i en följd av tal. Lösning: Deklarera en variabel max som ska hålla reda på det hittills största värdet. Låt max få ett litet startvärde. Gå sedan igenom talen och jämför med max. Uppdatera max ifall det aktuella talet är större. Algoritmen i pseudokod: max = "litet värde"; för alla värden { value = "nästa värde"; if (value > max) { max = value; Beräkna maximum Övning Beräkna och skriv ut det största talet av ett antal heltal som läses in från tangentbordet. Fyll i den kod som saknas. public class ComputeMax { int max = Integer.MIN_VALUE; while (scan.hasnextint()) { int nbr = scan.nextint(); System.out.println("Största talet är " + max); Datavetenskap (LTH) Föreläsning 3-4 HT 2017 23 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 24 / 36

Diskutera Deklarera vektorer Vektorer deklareras precis som andra variabler med public class ArrayExample { int[] v = {10, 25, -10, 42, 67, -23, 100, 5, 0; int min = Integer.MAX_VALUE; for (int i = 0; i < v.length; i++) { if (v[i] < min) { min = v[i]; System.out.println("Det minsta talet är " + min); v datatyp namn elementens typ int[] v; Markerar att det är en vektor och inte en vanlig int-variabel vektorns namn Vad gör programmet? Datavetenskap (LTH) Föreläsning 3-4 HT 2017 25 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 26 / 36 Skapa vektorer Vektorer är objekt vektorns namn elementens typ antal element Vektorer är objekt i Java. v refererar till vektorn (vilket framgår av bilden ovan). v = new int[5]; Antal element måste anges. Elementen får automatiskt startvärden. Oftast deklarerar och skapar man vektorn på samma gång: int[] v = new int[5]; v 0 0 0 0 0 0 1 2 3 4 Men ofta ritar man en enklare bild av vektorn: v 0 0 0 0 0 0 1 2 3 4 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 27 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 28 / 36

Använda vektorelement Ta reda på vektorns längd vektorns namn index Använd length för att ta reda antal element i vektorn. v[0] = 42; Ett vektorelement används som en vanlig variabel. Det är viktigt att indexet håller sig inom gränserna [0, antal element 1] for (int i = 0; i < v.length; i++) { v[i] = scan.nextint(); Tänk på att elementen numreras från 0 och uppåt. Datavetenskap (LTH) Föreläsning 3-4 HT 2017 29 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 30 / 36 Övning Deklarera och skapa en vektor numbers med plats för 5 stycken element av typen double. Tilldela första elementet värdet 7.2. numbers 7.2 0.0 0.0 0.0 0.0 0 1 2 3 4 Genvägar Överkurs, men praktiskt Skapa en vektor när man vet innehållet: int[] a = {7, 8, 9; Metoden Arrays.toString returnerar en sträng med vektorns innehåll. Skriv ut innehållet i vektorn: Deklarera och skapa en vektor exist med plats för 4 stycken element av typen boolean. Tilldela tredje elementet värdet true. System.out.println(Arrays.toString(b)); exist false false true false 0 1 2 3 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 31 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 32 / 36

Linjärsökning Mönster Linjärsökning Exempel Uppgift: Sök upp givet element i en följd av element. Lösning: Gå igenom elementen i tur och ordning och kontrollera för varje element om det är det sökta. Avbryt om det sökta elementet påträffas. Algoritmen i pseudokod: for (int i = 0; i < "antal element"; i++) { if ("elementet på plats i är det vi söker") { avbryt /** Söker efter talet nbr i vektorn v. Om nbr finns returneras platsen för nbr, annars -1 */ public static int indexof(int[] v, int nbr) { for (int i = 0; i < v.length; i++) { if (v[i] == nbr) { return i; return -1; Datavetenskap (LTH) Föreläsning 3-4 HT 2017 33 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 34 / 36 Diskutera Checklista public static int indexof(int[] v, int nbr) { for (int i = 0; i < v.length; i++) { if (v[i] == nbr) { return i; else { return -1; Varför fungerar inte det här? Exempel på vad du ska kunna skriva egna metoder formulera logiska uttryck i Java formulera algoritmer och programkod för att beräkna minsta och största värde deklarera, skapa och använda vektorer av typen int[] och double[] formulera algoritmer och programkod för vektorer, t ex sökning Datavetenskap (LTH) Föreläsning 3-4 HT 2017 35 / 36 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 36 / 36