Föreläsning 3-4 Innehåll

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

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

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 9-10 Innehåll

Föreläsning REPETITION & EXTENTA

Föreläsning 1 & 2 INTRODUKTION

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

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

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

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.

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

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

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

Typkonvertering. Java versus C

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

OOP Objekt-orienterad programmering

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

Tentamen OOP

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

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

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

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

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.

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

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

Föreläsning 7-8 Innehåll

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

Föreläsning 1-2 innehåll

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 2, vecka 8: Repetition

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

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

Programmering A. Johan Eliasson

OOP Objekt-orienterad programmering

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

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

Del A (obligatorisk för alla)

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]

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

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

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

2D1342 Programkonstruktion för F1, ht 2006

Del A (obligatorisk för alla)

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

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

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

Tentamen, EDA501 Programmering M L TM W K V

Tentamen i Programmeringsteknik I,, KandMa/Fy,

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.

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

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

2D1339 Programkonstruktion för F1, ht 2004

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

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

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

2D1339 Programkonstruktion för F1, ht 2003

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

Objektorienterad Programmering (TDDC77)

"if"-satsen. Inledande programmering med C# (1DV402)

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

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

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

JAVAUTVECKLING LEKTION 8

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

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

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

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

Instuderingsfrågor, del D

Tentamen, EDAA20/EDA501 Programmering

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

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

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

TDDC77 Objektorienterad Programmering

SMD 134 Objektorienterad programmering

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

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

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

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

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

OOP Objekt-orienterad programmering

Tentamen , Introduktion till Java, dtaa98, dtea53

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

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

Lösningsförslag till tentamen

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

2D1339 Programkonstruktion för F1, ht 2003

TENTAMEN PROGRAMMERINGSMETODIK MOMENT 2 - JAVA, 4P

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

Tentamen ID1004 Objektorienterad programmering April 7, 2015

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

JAVAUTVECKLING LEKTION 4

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

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

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

TDIU01 - Programmering i C++, grundkurs

TDIU01 - Programmering i C++, grundkurs

Transkript:

Föreläsning 3-4 Innehåll Skriva egna metoder Logiska uttryck Algoritm för att beräkna min och max Vektorer Datavetenskap (LTH) Föreläsning 3-4 HT 2017 1 / 36

Diskutera Vad gör programmet programmet? Föreslå vilka satser vi kan bryta ut till en egen metod. public class Asterisks { public static void main(string[] args) { System.out.println("Antal: "); Scanner scan = new Scanner(System.in); int n = scan.nextint(); for (int i = 1; i <= n; i++) { System.out.print( * ); System.out.println(); Datavetenskap (LTH) Föreläsning 3-4 HT 2017 2 / 36

Programexempel med metod public class Asterisks { public static void main(string[] args) { System.out.println("Antal: "); Scanner scan = new Scanner(System.in); int n = scan.nextint(); Asterisks.printAsterisks(n); // eller bara // printasterisks(); // om metoden finns i samma klass public static void printasterisks(int n) { for (int i = 1; i <= n; i++) { System.out.print( * ); System.out.println(); Datavetenskap (LTH) Föreläsning 3-4 HT 2017 3 / 36

Metod returtyp namn parameter public static void printasterisks(int n) { for (int i = 1; i <= n; i++) { System.out.print('*'); System.out.println(); satser som utförs då metoden exekveras 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. Deklaration av parameter typ och namn public static void printasterisks(int n) {... n 5 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 5 / 36

Modifierare för metoder public Metoden kan även användas utanför klassen. private Metoden kan bara användas inuti klassen. static Metoden hör till klassen och anropas inte på något objekt. Datavetenskap (LTH) Föreläsning 3-4 HT 2017 6 / 36

Diskutera Hur ska man ändra programmet nedan så att det skriver ut en godtycklig text ett önskat antal ggr? public class Asterisks { public static void main(string[] args) { System.out.println("Antal: "); Scanner scan = new Scanner(System.in); int n = scan.nextint(); Asterisks.printAsterisks(n); public static void printasterisks(int n) { for (int i = 1; i <= n; i++) { System.out.print( * ); System.out.println(); Datavetenskap (LTH) Föreläsning 3-4 HT 2017 7 / 36

Returtyp 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. Exempel: private static double calculatearea(double radius) { return Math.PI * radius * radius; Datavetenskap (LTH) Föreläsning 3-4 HT 2017 8 / 36

Metoder som returnerar värden Programexempel public class CircleProgram { public static void main(string[] args) { System.out.println("Radie: "); Scanner scan = new Scanner(System.in); 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; Datavetenskap (LTH) Föreläsning 3-4 HT 2017 9 / 36

Konstanter 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. Exempel: static final int NBR_CARDS = 52; final betyder att värdet inte får ändras 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. public static void main... { public int getarea(int radius) {... getarea();...... Datavetenskap (LTH) Föreläsning 3-4 HT 2017 11 / 36

Block Block Exempel: Satser som hör ihop. Omges av klammerparenteser { public class Asterisks {... // Satserna i en klass public static void printasterisks(int n) {... // Satserna i en metod for (int i = 1; i <= n; i++) {... // Satser som utföras i en for-sats Datavetenskap (LTH) Föreläsning 3-4 HT 2017 12 / 36

Kommentar Kommentar Exempel: 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

Övning Skriv klart metoden iseven. public class EvenNumbers { public static void main(string[] args) { System.out.println("Skriv ett heltal: "); Scanner scan = new Scanner(System.in); 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

Logiska uttryck 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; Datavetenskap (LTH) Föreläsning 3-4 HT 2017 15 / 36

Relationer 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 16 / 36

Logiska operatorer Logiska uttryck kan kopplas samman med operatorerna:! icke && och eller Exempel: x tillhör intervallet [5, 10] x >= 5 && x <= 10 x tillhör inte 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. Datavetenskap (LTH) Föreläsning 3-4 HT 2017 17 / 36

de Morgans lagar 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 18 / 36

Diskutera Betrakta följande program: public class Minimum { public static void main(string[] args) { System.out.println("Skriv två heltal: "); Scanner scan = new Scanner(System.in); 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 public class ComputeMin { public static void main(string[] args) { Scanner scan = new Scanner(System.in); int min = Integer.MAX_VALUE; while (scan.hasnextint()) { int nbr = scan.nextint(); if (nbr < min) { min = nbr; System.out.println("Minsta talet är " + min); Datavetenskap (LTH) Föreläsning 3-4 HT 2017 21 / 36

Konstanter för minsta och största tal 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 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; Datavetenskap (LTH) Föreläsning 3-4 HT 2017 23 / 36

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 { public static void main(string[] args) { Scanner scan = new Scanner(System.in); 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 24 / 36

Diskutera public class ArrayExample { public static void main(string[] args) { 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); Vad gör programmet? Datavetenskap (LTH) Föreläsning 3-4 HT 2017 25 / 36

Deklarera vektorer Vektorer deklareras precis som andra variabler med datatyp namn Exempel: elementens typ Markerar att det är en vektor och inte en vanlig int-variabel int[] v; vektorns namn v Datavetenskap (LTH) Föreläsning 3-4 HT 2017 26 / 36

Skapa vektorer vektorns namn elementens typ antal element 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]; Datavetenskap (LTH) Föreläsning 3-4 HT 2017 27 / 36

Vektorer är objekt Vektorer är objekt i Java. v refererar till vektorn (vilket framgår av bilden ovan). 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 28 / 36

Använda vektorelement vektorns namn index 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] Datavetenskap (LTH) Föreläsning 3-4 HT 2017 29 / 36

Ta reda på vektorns längd Använd length för att ta reda antal element i vektorn. 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 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 Deklarera och skapa en vektor exist med plats för 4 stycken element av typen boolean. Tilldela tredje elementet värdet true. exist false false true false 0 1 2 3 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 31 / 36

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: System.out.println(Arrays.toString(b)); Datavetenskap (LTH) Föreläsning 3-4 HT 2017 32 / 36

Linjärsökning Mönster 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 Datavetenskap (LTH) Föreläsning 3-4 HT 2017 33 / 36

Linjärsökning Exempel /** 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 34 / 36

Diskutera 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? Datavetenskap (LTH) Föreläsning 3-4 HT 2017 35 / 36

Checklista 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 36 / 36