Föreläsning 4: for, while, do-while

Relevanta dokument
7 GRUNDERNA I PROGRAMMERING

Heltal(int) Programmeringsteknik 54

3.3 for-satsen. Programmering, grundkurs, 8.0 hp, Elektro, KTH, hösten Föreläsning 3

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

PROV. 10 Uppräknade datatyper

Föreläsning 5 Mer om funktioner, villkor

Barnhack! kom igång med Scratch del 1

Roboten Karel lär sig Java

For-sats/slinga. Notis

Texas Instruments Sverige 1997 Printed in Sweden by Gumm essons Tryckerier AB

Träningsprogram för att bli av med tvångssyndrom

Word och Excel. - en kort handledning Av Dag Kihlman och Martin Gellerstedt

Talmönster och algebra. TA

Referentiell transparens. Programmeringsmetodik DV1 Programkonstruktion 1. Moment 10 Om sidoeffekter In/utmatning och imperativ programmering

TITEL. Johannes Hedberggymnasiet. Laborantens namn: Medlaboranters namn: Klass: Skola: Påbörjad: Inlämnad:

An enrichment and extension programme for primary-aged children

Mer om reella tal och kontinuitet

Att ta fram en tidsplan

Komma igång med TI-82 STATS

Nedan skapar vi klassen Person innehållande datamedlemmar för förnamn, efternamn, ålder, längd och vikt:

Hur man gör en poster i PowerPoint

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

Träningsprogram för att förstärka ett önskvärt beteende hos små barn

Så surfar du säkrare 2 Skydda surfvanor på din dator 2 Skydda det du skickar 4 Skydda din identitet 4

KDiff3 är ett verktyg för jämförelser och sammanfogning av filer och kataloger, som

18 Eldorado 4 A Lärarbok Undervisning att skapa förutsättningar för elevers lärande

Hur mycket släkt är släktingar?

Del 1 Allmänt Del 2 Komma igång...3. Del 3 Systemspel med Jokersystemet... 17

Den magiska dörren. - ett romanprojekt

Att skriva uppsats. Uppsatsens delar

Transkript:

TDA 545: Objektorienterad programmering Föreläsning 4: for, while, do-while Magnus Myréen Chalmers, läsperiod 1, 2014-2015

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if (year%4 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if (year%4 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if (300 % 4 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if ( 0 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först beräknas villkoret Anta att minnet är: if (true) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: if (true) { if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; else { return false; nu vet vi att första { körs och else raderas Anta att minnet är: variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (year%100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if ( 300 % 100 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if ( 0 == 0) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (true) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (true) { if (year%400 == 0) { return true; else { return false; else { return true; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (year%400 == 0) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (year%400 == 0) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (300 % 400 == 0) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if ( 300 == 0) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (false) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: if (false) { return true; else { return false; variabel, dvs en minnesplats 300 namn: year

Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: return false; variabel, dvs en minnesplats 300 namn: year resultatet är att metoden/funktionen returnerar false, mera om metoder senare

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först evalueras deklarationen Anta att minnet är: variabeler, dvs minnesplatser: int thismonth; int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5;

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: först evalueras deklarationen int thismonth; int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: minnesplatsen är tom namn: thismonth

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nu har deklarationen körts då raderar vi den int thismonth; int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; variabeler, dvs minnesplatser: en ny minnesplats skapas med 1987 som värde namn: thismonth 1987 namn: thisyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int thisyear = 1987; int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: int nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = thisyear + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = 1987 + 1; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = 1988; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = 1988; nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear 1988 namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = nextyear + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear 1988 namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = 1988 + 5; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear 1988 namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: nextyear = 1993; Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth 1987 namn: thisyear 1988 namn: nextyear

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Exempel: Anta att minnet är: variabeler, dvs minnesplatser: namn: thismonth koden har kört klart 1987 namn: thisyear 1993 namn: nextyear

Beräkningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) Öva på egenhand på papper t.ex.

or-satsen 8; i = i+1) { i + ); --- (på en rad) ch <= 'z'; ch++) { n(ch); en per rad 50; tal=2*tal){ n(tal); med 8, 16, 32 while loopar Loopar med okänt antal varv=while Loopar med okänt antal varv=while Blocket utförs noll eller flera gånger. Syntax Blocket utförs noll eller flera gånger. while (<boolean expression>) { Syntax Informell semantik while (<boolean expression>) <statements> { 1: beräkna <boolean expression> <statements> 2: om det blev true, kör <statements> Informell Semantik och fortsätt från steg 1 igen. 1. Loopvillkoret (boolean expression) evalueras. Informell Semantik 3: om det blev false, då är while klart, 1. Loopvillkoret (boolean expression) evalueras. dvs programmet fortsätter köra koden 2. Om det är sant exekveras satserna inuti loopen (<statements>) en gång varefter 1-2 utförs igen. som kommer efter 2. Om det är sant exekveras satserna inuti loopen (<statements>) en gång varefter 1-2 Tips utförs I igen. beräkningar skall man alltid ersätta 3. Om while villkoret (<bool- exp>) är falskt görs { satser ingenting dvs loopen terminerar (stannar). 3. Om villkoret är falskt görs ingenting dvs loopen terminerar (stannar). int i = 0; int p = 4; while (i < 10 && p > 2) { satser... i = i+1; // end loop if (<bool- exp>) { int satser; i = 0; int while p = 4; (<bool- exp>) { satser while (i < 10 && p > 2) { satser... viktigt att i eller p ändras så loopen

Exempel för while int i = 0; while (i < 3) {

Exempel för while int i = 0; while (i < 3) {

Exempel för while while (i < 3) { namn: i 0

Exempel för while while (i < 3) { namn: i 0

Exempel för while if (i < 3) { while (i < 3) { namn: i 0

Exempel för while if (i < 3) { while (i < 3) { namn: i 0

Exempel för while if (0 < 3) { while (i < 3) { namn: i 0

Exempel för while if (true) { while (i < 3) { namn: i 0

Exempel för while while (i < 3) { namn: i 0

Exempel för while while (i < 3) { namn: i 0

Exempel för while while (i < 3) { namn: i 0

Exempel för while System.out.print(0 + " "); while (i < 3) { namn: i 0

Exempel för while System.out.print("0 "); while (i < 3) { namn: i 0

Exempel för while System.out.print("0 "); while (i < 3) { namn: i 0

Exempel för while while (i < 3) { namn: i Utskrift (output): 0 0

Exempel för while while (i < 3) { namn: i Utskrift (output): 0 0

Exempel för while i = 0 + 1; while (i < 3) { namn: i Utskrift (output): 0 0

Exempel för while i = 1; while (i < 3) { namn: i Utskrift (output): 0 0

Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 if (i < 3) { while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 if (i < 3) { while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 if (i < 3) { while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 if (1 < 3) { while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 if (true) { while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0

Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 1 while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 if (i < 3) { while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 if (i < 3) { while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 if (i < 3) { while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 if (true) { while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1

Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1 2

Exempel för while namn: i 2 while (i < 3) { Utskrift (output): 0 1 2

Exempel för while while (i < 3) { namn: i Utskrift (output): 0 1 2 3

Exempel för while while (i < 3) { namn: i Utskrift (output): 0 1 2 3

Exempel för while if (i < 3) { while (i < 3) { namn: i Utskrift (output): 0 1 2 3

Exempel för while if (i < 3) { while (i < 3) { namn: i Utskrift (output): 0 1 2 3

Exempel för while if (i < 3) { while (i < 3) { namn: i Utskrift (output): 0 1 2 3

Exempel för while if (3 < 3) { while (i < 3) { namn: i Utskrift (output): 0 1 2 3

Exempel för while namn: i 3 detta betyder att koden mellan { inte körs if (false) { while (i < 3) { Utskrift (output): 0 1 2

Exempel för while namn: i 3 Utskrift (output): 0 1 2 koden har kört klart

Exempel 2 vad händer om vi ändrar koden så här? int i = 0; while (i = 3) { System.out.print(i + " ); i = i + 2; och så här?

Exempel 2 int i = 0; while (i == 3) { System.out.print(i + " ); i = i + 2; Utskrift (output): 0 2 4 6 8 10 2000000 2000002 2000004 osv

Exempel 2 Loopar av denna stil är mycket vanliga: deklaration och utgångsvärde int i = 0; villkor för while while (i < 3) { beräkning som inte ändrar på i justering av variabeln i Dessa loopar kan skrivas med for-satsen: deklaration och utgångsvärde villkor för while justering av variabeln i for (int i = 0; i < 3; i = i + 1) { beräkning som inte ändrar på i

int i = 0; while (i < 3) { for (int i = 0; i < 3; i = i + 1) { Tips For av formen for (<init>, <bool>, <chg>) { <stmts> är precis samma som <init>; while (<bool>) { <stmts>; <chg>

case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; // return => no break needed case 4: case 6: case 9: case 11: return 30; case 2: F3 10 Loopar med känt antal varv = for Syntax for(<init>; <boolexpr>; <change>) { if (leapyear(year)) { return 29; else { return 28; // dålig indentering <statements> Informell Semantik 1. init uttrycket beräknas (sker bara en gång). Vanligen initialiserar man bara en räknare till dess startvärde. 2. <stmts> boolexpr beräknas. Så länge det är sant kommer default: return -1; // end switch // end daysinmonth 3. loopens satser (statements) att beräknas. 4. uttrycket change beräknas. Vanligen ökar man räknaren med ett. Gå till punkt 2. räknaren skall deklareras. Om det görs i loopen <stmts>; så är den inte känd utanför loopen räknaren bör inte ändras i loopens satser init, boolexpr, change kan uteslutas init och change kan vara flera kommaseparerade satser Loopar med känt antal varv = for Syntax for(<init>; <boolexpr>; <change>) { for satsen: loopar med känt antal varv <statements> Tips For av formen for (<init>, <bool>, <chg>) { är precis samma som <init>; while (<bool>) { <chg> Informell Semantik 1. init uttrycket beräknas (sker bara en gång). Vanligen initialiserar man bara en räknare till dess startvärde. 2. boolexpr beräknas. Så länge det är sant kommer 3. loopens satser (statements) att beräknas. 4. uttrycket change beräknas. Vanligen ökar man räknaren med ett. Gå till punkt 2. räknaren skall deklareras. Om det görs i loopen så är den inte känd utanför loopen räknaren bör inte ändras i loopens satser init, boolexpr, change kan uteslutas init och change kan vara flera kommaseparerade satser Inget av de två sista rekommenderas F3 12

Exempel på for-satsen for (int i = 0; i <= 8; i = i+1) { System.out.print(i + ); // 0 1 2 3 4 5 6 7 8 (på en rad) for (char ch = 'a'; ch <= 'z'; ch++) { System.out.println(ch); // a b c... z med en per rad for(int tal=1; tal<=50; tal=2*tal){ System.out.println(tal); // tal blir 1, 2, 4, 8, 16, 32 använd endast den här formen Keep it simple

( Loopar med okänt antal varv = do-while ) Blocket utförs en eller flera gånger *** Ovanligt att man vill göra det *** do-while loopar ( Loopar ( Loopar med med okänt okänt antal antal varv varv = = Syntax do-while ) ) Vanliga fel vid konstr loopar Vanliga f Lämpar sig för inläsning från en användare Blocket utförs en eller flera gånger Blocket utförs do en { Blocket utförs en eller eller flera flera gånger gånger *** Ovanligt att man vill göra det *** De vanligaste felen är *** Ovanligt att <statements> man vill göra det *** De *** Ovanligt att man vill göra det Lämpar sig för inläsning Lämpar från sig en för användare oändliga *** De vanligaste fe while inläsning (<boolean från en expression>); loopar och off-by-o användare oändliga Lämpar sig för inläsning från en användare oändliga loopa Syntax Syntax Informell Semantik Syntax (pseudo-) oändlig (pseudo-) loop: do { oän do { 1. Satserna (statements) utförs en (pseudo-) gång oänd do { int i = 0; int i = 0; <statements> <statements> 2. Loopvillkoret (boolean while (i expr.) < 10) beräknas. int i = 0; <statements> while { (i < while (<boolean expression>); while (<boolean expression>); while (i < 1 while (<boolean expression>); Om det är sant utförs satser 1-2 igen... satser. Informell Semantik Informell Semantik satser.. i = i-1; Informell Semantik3.Om villkoret är falskt i = görs i-1; ingenting 1. Satserna (statements) 1. Satserna utförs (statements) en gång utförs en gång i dvs = i-1; 1. Satserna (statements) loopen utförs terminerar. en gång 2. Loopvillkoret (boolean expr.) beräknas. För att komma 2. Loopvillkoret (boolean expr.) beräknas. För att komma ur en oändlig lo 2. Loopvillkoret int (boolean n = 0; expr.) beräknas. För att komma Om det är sant utförs 1-2 igen dvs control-c, <stmts> Om det är sant utförs 1-2 igen do { dvs control-c, håll in tangenten Om det är sant utförs 1-2 igen dvs 3.Om villkoret är falskt görs ingenting dvs på control-c, C h 3.Om villkoret är falskt görs ingenting println( Mata dvs på Cett tal >5 ); 3.Om villkoret loopen terminerar. är falskt görs ingenting dvs på C loopen terminerar. n = in.nextint(); int loopen n = terminerar. 0; off-by-one: (f int n = 0; while ( n<=5 ); int do n = { 0; off-by-one: (fält off-by-one: kommer int[] pnr1t sena (fä do { // gör jobbet här, println( Mata in ett tal >5 int[] inte ); pnr1to9 i loopen do { int[] for = new (int pnr1to int[ i= println( Mata println( Mata n ett = in.nextint(); tal >5 ); ett tal >5 for ); (int i=0; i<=9; pnr1to9[ i=i+ <stmts> F3 for (int 15 i=0 n = in.nextint(); n = while in.nextint(); ( n<=5 pnr1to9[i] = pnr1to9[i läs tal while ( n<=5 ); while // gör ( n<=5 jobbet ); här, inte i loopen // end lo Tips do-while av formen do { while (<bool- exp>); är precis samma som <stmts>; while (<bool- exp>) {

Scanner (används i nästa ex.) Klassen java.util.scanner förser oss med inmatningsprimitiver så vi kan läsa tokens" från tangentbordet: (en token kan vara ett tal eller en sträng) import java.util.scanner;... Scanner in = new Scanner(System.in); String str; while (in.hasnext()) { str = in.next(); System.out.println(str); Metoder i Scanner: (ersätt X med t.ex. Int) in.hasnextx() finns det ett X in.hasnext() finns det någonting in.nextx() ger nästa X in.next() ger nästa token som sträng in.nextline() ger hela raden som en sträng

do-while exempel int n = 0; do { println( Mata in ett tal >5 ); n = in.nextint(); while (n <= 5); precis samma som: int n = 0; println( Mata in ett tal >5 ); n = in.nextint(); while (n <= 5) { println( Mata in ett tal >5 ); n = in.nextint();

Vanliga fel vid konstruktion av loopar De vanligaste felen är oändliga loopar och off-by-one fel. (pseudo-)oändlig loop: int i = 0; while (i < 10) { satser... i = i- 1; För att komma ur en oändlig loop tryck: control-c (dvs håll in tangenten ctrl och tryck på C) off-by-one: (arrays kommer senare) int[] array = new int[9]; for (int i=0; i<=9; i=i+1) { array[i] = läs tal från användaren försöker läsa index 9 som inte finns

Kontrollstrukturer Kontrollstrukturer Kontrollstrukturer När använder man vad? När När använder använder man man vad? vad? Några generella tips: Några generella tips: for: Några generella tips: for: for: Loopar med känt antal varv Loopar med Loopar känt antal med varv känt antal varv keep it simple - det bör vara nåt i stil while med keep for it (int simple i=0, - det i<10; bör vara i++) nåt... i stil med använd for annars (int en i=0, while i<10; i++)... använd annars en while keep it simple - det bör vara nåt i stil med for (int i=0, i<10; i++)... använd annars en while while Loopar while med okänt antal varv noll Loopar eller med flera while okänt varv antal varv do-while Loopar med okänt antal varv noll eller flera varv noll eller flera varv Loopar do-while med okänt antal varv ett Loopar eller med flera okänt varv (ovanligt antal varv - undvik) for: Kontrollstrukturer När använder man vad? Några generella tips: Loopar med känt antal varv D De flesta De flesta satserna satsern är Ea Ett program Ett program byggs byggs huvudsak deklarationer deklarationer och sa Enkla satser Enkla satser (enkla satser avslutas med (enkl ";") (enkla satser avslutas med Tilldelning Tilldelning Till Metodanrop (av void metod Metodanrop (av void Me break ("Kortslutning" av loo return break <uttryck> ("Kortslutning" bre (För return att avsluta <uttryck> underprog ret resultat (För från att avsluta funktioner) unde ; (Gör resultat ingenting från ) funkti ; (Gör ingenting ) keep it simple - det bör vara nåt i stil m for (int i=0, i<10; i++)... använd annars en while Loopar med okänt antal varv noll eller flera varv do-while Loopar med okänt antal varv Sammansatta satser ett eller flera varv (ovanligt - undvik) Enkla ; (avslutas Sammansatta INTE med ";" satser utom do Villkorsats (avslutas (if) INTE med ";" Sam ut Flervalsats Villkorsats (switch) (if)

for: Loopar med känt antal varv med. De flesta satserna är avklarade keep it simple - det bör vara nåt i stil med for (int i=0, i<10; i++)... använd annars en while De flesta satserna är avklarade Ett program byggs huvudsakligen upp av deklarationer och satser De flesta satserna är avklarade Enkla satser while Loopar med Ett program okänt antal byggs varv huvudsakligen upp av noll eller flera varv deklarationer och satser Enkla satser (enkla satser avslutas med ";") Tilldelning do-while (enkla satser avslutas med ";") Tilldelning Loopar med okänt antal varv Metodanrop (av void metoder) ett eller flera varv (ovanligt - undvik) break ("Kortslutning" av loop/switch sats) Metodanrop (av void metoder) break ("Kortslutning" av loop/switch sats) return <uttryck> (För att avsluta underprogram eller ge resultat från funktioner) return <uttryck> (För att avsluta underprogram eller ge resultat från funktioner) ; (Gör ingenting ) ; F3 (Gör ingenting 17 ) Enkla satser (enkla satser avslutas med ";") Tilldelning Metodanrop (av void metoder) break ("Kortslutning" av loop/switch sats) return <uttryck> (För att avsluta underprogram eller ge resultat från funktioner) ; (Gör ingenting ) Sammansatta satser (avslutas INTE med ";" utom do-while ) Villkorsats (if) Flervalsats (switch) Iterationssatser (for, while och do-while) Blocksats ( {satser ) F3 18 Sammansatta satser Sammansatta satser (avslutas INTE med ";" utom do-while ) Villkorsats (if) Flervalsats (switch) (avslutas INTE med ";" utom do-while ) Villkorsats (if) Kompilering och länkning 1. Från anteckningarna skapas en sk källtext med hjälp av ett editeringsprogram tex emacs. Källtexten utgör den för oss läsbara beskrivningen av det vi vill att programmet skall göra. Program,

F3 17 F3 18 F3 17 F3 18 Kompilering och länkning Kompilering Kompilering och länkning och länkning 1. Från anteckningarna 1. Från anteckningarna skapas en skapas källtext en sk med källtext hjälp med av ett hjälp av ett editeringsprogram editeringsprogram tex emacs. tex Källtexten emacs. Källtexten utgör den utgör för oss den läsbara för oss läsbara beskrivningen beskrivningen av det vi vill av det att programmet vi vill att programmet skall göra. skall Program, göra. Program, programtext programtext och källprogram och källprogram är andra benämningar är andra benämningar på källtext. på källtext. Vanligen slutar Vanligen källtextens slutar källtextens namn på något namn som på något avslöjar som vilket avslöjar språk vilket språk som använts, som tex använts,.ada,.java, tex.ada,.c (C),.java,.p (Pascal),.c (C),.p.asm (Pascal), (assembler).asm (assembler) osv. osv. 2. Källtexten 2. Källtexten kan vi ge som kan vi indata ge som till indata en kompilator. till en kompilator. En kompilator En kompilator översätter, översätter, den för oss den begripliga för oss begripliga men för datorn men för obegripliga, datorn obegripliga, texten tilltexten t maskinkod maskinkod som datorn som förstår. datorn förstår. Detta kallas Detta alltså kallas kompilering. alltså kompilering. I I Javas fall så Javas översätts fall så källtexten översätts källtexten till en mellanform, till en mellanform, ett slags ett slags maskinspråk maskinspråk för alla datorer, för alla som datorer, kallas som bytekod. kallas Kompilatorn bytekod. Kompilatorn analyserar analyserar också texten också och texten kontrollerar och kontrollerar om programmet om programmet vi skrivit ärskrivit är ett språkligt ett korrekt språkligt program. korrekt Om program. det tex Om förekommer det tex förekommer syntaxfel syntaxfel eller eller typfel i källtexten typfel i källtexten så meddelar så meddelar kompilatorn kompilatorn detta och detta stannar. och stannar. 3. Som resultat 3. Som av resultat kompileringen av kompileringen får vi ett program får vi ett som program innehåller som innehåller de d genererade genererade bytekodinstruktionerna. bytekodinstruktionerna. Detta lagras Detta i en lagras fil som i en heter fil som heter samma som samma källtexten som källtexten men med men appendix med appendix.class..class. 4. Varje dator 4. Varje har sedan dator har en bytekod sedan en bytekod interpreter interpreter som som som översätter som översätter till den aktuella till den datorns aktuella maskinkod. datorns maskinkod. Detta program Detta är program på är på maskinkodsform maskinkodsform men alla referenser men alla referenser (adresser) (adresser) är inte upplösta är inte upplösta (kända). Det (kända). innebär Det att innebär vissa andra att vissa programmoduler andra programmoduler (som tex (som tex java.lang) java.lang) inte är kända inte ännu är kända eftersom ännu de eftersom kompilerats de kompilerats separat. separat. 5. Nästa steg 5. Nästa är att steg kalla är på att länkaren kalla på som länkaren bestämmer som bestämmer var var instruktionerna instruktionerna skall ligga skall i minnet ligga och i minnet fyller och i alla fyller referenser i alla referenser mellan mellan modulerna. modulerna. Om vi länkar Om ihop vi länkar våra ihop objektprogram våra objektprogram och andraoch andra referenser referenser så får vi ett så exekverbart får vi ett exekverbart program, program, ett laddprogram. ett laddprogram. 6. Ett laddprogram 6. Ett laddprogram är färdigt är att färdigt ladda att in ladda i datorn in för i datorn att köras. för att I detta köras. I de program är program alla referenser är alla referenser upplösta. upplösta. 7. När vi exekverar 7. När vi exekverar programmet programmet får vi eventuellt får vi eventuellt förse det med förse indata det med indata och får (eventuellt) och får (eventuellt) ett resultat ett (utdata). resultat Vi (utdata). kan exekvera Vi kan exekvera programmet programmet genom att genom namnet att ge på namnet källtextfilen på källtextfilen utan appendix. utan appendix. Dessa faser Dessa måste faser dessutom måste dessutom gås igenom gås varje igenom gång varje man gång ändrar man något ändrar i något källtexten källtexten