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

Slides:



Advertisements
Liknande presentationer
Repetition av språket Java
Advertisements

Array Skriv ett program som frågar följande: ”Hur många tal vill du mata in?” användaren matat in ett tal t.ex n. då frågar programmet n ggr följande.
Programstruktur: C för enchipsdatorer
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
OOP Objekt-orienterad programmering
Om Java C =>Java syntax variabler metoder färdiga klasser
Välkommen Vahid Mosavat
Programmeringsteknik för K och Media
Föreläsning 13 Allt om tentan. Sistaminutenhjälp: På fredag 17 december kl 12 sitter Linda i kemi-fiket och svarar på frågor.
Att programmera i språket Java
Föreläsning 6 Referenser Objekt som parametrar public/private Klassvariabler och klassmetoder.
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
i olika programmeringsspråk
Föreläsning 4, Kapitel 4 Gruppera objekt Kursbok: “Objects First with Java - A Practical Introduction using BlueJ”, David J. Barnes & Michael Kölling.
INTRODUKTION TILL PROGRAMMERING
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 7 ( ) INNEHÅLL: -Klasser och instansvariabler -Tabeller av klassobjekt.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Repetition inför slutprovet
Programmering B PHP Lektion 2
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Jämförelseoperatorer -Villkorssatser -Logiska operatorer.
OOP F3:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 3 Iteration Många variabler av samma sort – Arrayer.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Föreläsning 12 Om slutprovet. Repetition –deklaration av variabler –skapande av objekt (instansiering) –Vektorer och Vector-klassen –Klasser –Instans-/klassvariabler.
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 1 Om kursen Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
ITK:P1 Föreläsning 2 Introduktion till objektorientering DSV Marie Olsson.
Class VattenKraft{ public static void main(String[] args){ int num=150; int i, totflöde, maxflöde; int[] fall = new int[num]; //vattenflödet i vattenfallen.
OOP F13:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 13 Repetition variabler, selektion och iteration.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Central-enhet PM CPU BIOS Skiv- minne Sekundär- minnes- enheter (SM)
Föreläsning 17 Repetition. Källkodsformat Unicode används åäöμψζ tillåtna i namn på identifierare Inte alla miljöer klarar av det Källkod Bytekod Java.
Föreläsning 3 Villkorssatsen if Slingor: while och for Felsökning.
TILLÄMPAD DATALOGI (TILDA) Övningsgrupp 2 Marcus Hjelm
OOP F5:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 5 Klasser och objekt Skapa objekt - new Referenser Konstruktorer Inkapsling.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
Föreläsning 5 Objekt Klasser Konstruktorer Metoder Minnesbilder av objekt.
Programmeringsteknik för K och Media
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 7 Repetition Sammansatta datatyper –vektor (hakvektor, array) –matris.
1 Föreläsning 2 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Föreläsning 3 Operatorer Flödeskontroll Primitiva datatyperKlasser i API och egna klasser int double byte float char boolean short long String BufferedReader.
OOP&M - teori1 OOP&M – Föreläsning 5 kap 8-13 Operatorer,typkonvertering, booleska operatorer, if och else.
OOP&M - teori1 OOP– Föreläsning vecka Genomgång uppgifter Arbetsmetoder Repetition Kapitel 14 Metoder.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
1 Föreläsning 4 Metoder & parametrar Array API och klassen ArrayList.
Selektion jämförande och logiska operatorer
Så fungerar en dator Mental bild av en dator
Föreläsning 2 Programmeringsteknik DD1310
Föreläsning 6: Metoder och fält (arrays)
Föreläsning 4: for, while, do-while
Föreläsning 11: Rekursion
Föreläsning 8: Exempel och problemlösning
Föreläsning 12: Exempel och problemlösning
Innehåll: Arrays Arraylists For loops For-each loops
Föreläsning 2: Typer, klasser, tilldelning
Föreläsning 9: Arv och UML
Föreläsning 5: Att använda klasser & objekt
Iteration – Repetitionssats - while
Repetitionsföreläsning 1: Lite rekursion & problemlösning
Presentationens avskrift:

Föreläsning 3: Booleans, if, switch TDA 545: Objektorienterad programmering Magnus Myréen Chalmers, läsperiod 1, 2015-2016

Påminnelse om klasser och objekt Boll boll1 = new Boll(5,12); skapar ett nytt objekt (boll1) som är en instans av klassen Boll. Hela raden kallas en deklaration, och i detta fall med utgångsvärdet specificerat med = new Boll(5,12). Som bild: x är 5, y är 12 namn: boll1 typ: Boll variabel, dvs en minnesplats ett objekt, dvs instans referensvärde Boll har x, y en klass definition instanspil

Påminnelse om terminologi och namn objekt = instans (av en klass) immutable object — ett objekt som man inte kan ändra primitiva typer (int, char, boolean, mm.) klasstyper/referenstyper (allt annat, String, Rectangle, Ball, mm.) Namn konventioner/regler: boll Boll BOLL variabel eller metod klass konstant

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

Deklarationer och tilldelningar Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) minnesplatsen är tom Exempel: Anta att minnet är: variabeler, dvs minnesplatser: först evalueras deklarationen namn: thisMonth typ: int 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: Anta att minnet är: nu har deklarationen körts då raderar vi den variabeler, dvs minnesplatser: namn: thisMonth typ: int 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: Anta att minnet är: variabeler, dvs minnesplatser: namn: thisMonth typ: int 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: Anta att minnet är: variabeler, dvs minnesplatser: namn: thisMonth typ: int 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: Anta att minnet är: variabeler, dvs minnesplatser: namn: thisMonth typ: int int thisYear = 1987; int nextYear = thisYear + 1; nextYear = nextYear + 5; namn: thisYear typ: int 1987 en ny minnesplats skapas med 1987 som värde

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 typ: int int thisYear = 1987; int nextYear = thisYear + 1; nextYear = nextYear + 5; namn: thisYear typ: int 1987

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 typ: int int nextYear = thisYear + 1; nextYear = nextYear + 5; namn: thisYear typ: int 1987

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 typ: int int nextYear = thisYear + 1; nextYear = nextYear + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int

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 typ: int nextYear = thisYear + 1; nextYear = nextYear + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int

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 typ: int nextYear = thisYear + 1; nextYear = nextYear + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int

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 typ: int nextYear = 1987 + 1; nextYear = nextYear + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int

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 typ: int nextYear = 1988; nextYear = nextYear + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int

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 typ: int nextYear = 1988; nextYear = nextYear + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int

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 typ: int nextYear = nextYear + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int 1988

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 typ: int nextYear = nextYear + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int 1988

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 typ: int nextYear = 1988 + 5; namn: thisYear typ: int 1987 namn: nextYear typ: int 1988

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 typ: int nextYear = 1993; namn: thisYear typ: int 1987 namn: nextYear typ: int 1988

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 typ: int namn: thisYear typ: int 1987 koden har kört klart namn: nextYear typ: int 1993

Beräkningar http://www.pythontutor.com/java.html 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. http://www.pythontutor.com/java.html Man kan testa sina egna simuleringar mot ett verktyg: … men OBS ni måste kunna göra detta utan verktyg! int thisMonth; int thisYear = 1987; int nextYear = thisYear + 1; nextYear = nextYear + 5;

Läsanvisning Jag pekar nedan på var i boken de olika sakerna tas upp. Boken tar dock upp dessa saker ganska sent i sammanhang med andra saker som ni inte ännu behärskar. Det kan därför vara rätt svårt att läsa dessa hänvisningar nu. datatypen Boolean 4.2, 4.6 relationsuttryck och logiska uttryck (.) De Morgan's lag (s 217) operatorer (utspritt) if (4.1), switch(4.8) for (12.7,12.6), while (7.3.1, 12.6), do-while (7.5) Nästa föreläsning:

Datatypen Boolean och logiska uttryck Utsagan: “det snöar” eller “a<8” är antingen sann eller falsk Att ta reda på vilket är en form av beräkning som resulterar i något av värdena sant eller falskt Typen boolean har litteralerna {true, false} och de logiska (booleska) operatorerna: and (&&), or (||) och not (!) Relationsuttryck och logiska uttryck Relationsuttryck: a<10, a!=10, a<=10-b Logiska uttryck byggs upp av variabler av typ boolean, relationsuttryck och de logiska operatorerna and (&&), or (||) och not (!) Exempel: x>10 && x<20-y || b 10<x<20 går ej! 10<x && x<20

Sanningstabell för de logiska operatorerna a b ! a a && b a || b false false true false false false true true false true true false false false true true true false true true boolean sunny, overcast, pleasant; double temp; ... sunny = true; overcast = !sunny; pleasant = sunny && !(temp < 18.0 || 30.0 < temp);

testa koden med visualiseringsverktyget! public class Weather { public static void main(String[] args) { boolean sunny, overcast, pleasant; double temp; temp = 19.0; sunny = true; overcast = !sunny; pleasant = sunny && !(temp < 18.0 || 30.0 < temp); System.out.println("Pleasant: " + pleasant); }

Förenkling av logiska uttryck De Morgan's lag !(A && B) är samma sak som !A || !B !(A || B) är samma sak som !A && !B Enkelt ex: Betrakta uttrycket på förra sidan !(temp < 18.0 || 30.0 < temp) är då detsamma som !(temp < 18.0) && !(30.0 < temp) Logiska uttryck evalueras med "lat" evaluering. (lazy evaluation) vilket i sin tur är 18.0 <= temp && temp <= 30.0

Förenkling av logiska uttryck public class Weather { public static boolean p(String s, boolean v) { System.out.println(s); return v; } public static void main(String[] args) { boolean sunny, overcast, pleasant; double temp; temp = 17.0; sunny = true; overcast = !sunny; pleasant = sunny && !(p("mindre",temp < 18.0) || p("större",30.0 < temp)); System.out.println("Pleasant: " + pleasant); Logiska uttryck evalueras med "lat" evaluering. (lazy evaluation) Vad skrivs ut?

De flesta operatorer i Java i precedensordning dvs i Java binder && starkare än || a && b || c (a && b) || c är samma som OBS:

if satsen: selektion/val

if satsen public class Test { public static void main(String[] args) { int a = 5; int b = 6; if (a < b) { System.out.println("a minst"); } else if (a == b) { System.out.println("a = b"); } else { System.out.println("b minst"); } // end if } } // end Test

Exempel: Skottår if (year%4 == 0) { if (year%100 == 0) { return true; } else { return false; }

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

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

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

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

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

nu vet vi att första { … } körs och else raderas Evaluering Det är viktigt att ni kan se hur kod körs. ( se = simulera på papper, eller i huvudet ) nu vet vi att första { … } körs och else raderas Exempel: Anta att minnet är: if (true) { if (year%100 == 0) { if (year%400 == 0) { return true; } else { return false; } variabel, dvs en minnesplats 300 typ: int 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; } variabel, dvs en minnesplats 300 typ: int 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; } variabel, dvs en minnesplats 300 typ: int 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; } variabel, dvs en minnesplats 300 typ: int 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; } variabel, dvs en minnesplats 300 typ: int 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; } variabel, dvs en minnesplats 300 typ: int 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; } variabel, dvs en minnesplats 300 typ: int 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 typ: int 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 typ: int 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 typ: int 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 typ: int 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 typ: int 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 typ: int 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 typ: int namn: year resultatet är att metoden/funktionen returnerar false, mera om metoder senare…

Testa koden själv! http://www.pythontutor.com/java.html Verktyg: public class Leap { public static boolean isLeapYear(int year) { if (year%4 == 0) { if (year%100 == 0) { if (year%400 == 0) { return true; } else { return false; } public static void main(String[] args) { System.out.println(isLeapYear(300)); http://www.pythontutor.com/java.html Verktyg:

Förenkla... if (year%4 == 0) { if (year%100 == 0) { return true; } else { return false; } if (year%4 == 0) { if (year%100 == 0) { return (year%400 == 0) } else { return true; } return false;

Förenkla... if (year%4 == 0) { if (year%100 == 0) { return (year%400 == 0) } else { return true; } return false; if (year%4 == 0) { return (year%100 != 0) || (year%400 == 0) } else { return false; }

Förenkla... OBS: Förenkla försiktigt! Gör inte koden if (year%4 == 0) { return (year%100 != 0) || (year%400 == 0) } else { return false; } return (year%4 == 0) && ((year%100 != 0) || (year%400 == 0)) OBS: Förenkla försiktigt! Gör inte koden svårläst eller fel. OBS: Logiska uttryck evalueras med "lat" evaluering. (lazy evaluation)

switch/case satsen: selection/val Syntax Exempel

switch exempel // Precon: 1 <= month <= 12 // Postcon: returns the number of days in the month public static int daysInMonth(int year, int month) { switch (month) { 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: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } // end switch } // end daysInMonth

Evaluering/beräkning av switch Vi börjar med att räkna uttrycket som bestämmer vad vi kommer att radera. switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch Vi börjar med att räkna uttrycket som bestämmer vad vi kommer att radera. switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch Vi börjar med att räkna uttrycket som bestämmer vad vi kommer att radera. switch (6) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch case 6: case 9: case 11: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } case 9 och 11 är bara namn, de skippar vi case 9 och 11 är bara namn, de skippar vi Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch case 6: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch case 6: return 30; case 2: if (isLeapYear(year)) { return 29; } else { return 28; } default: return -1; } Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6

Evaluering/beräkning av switch return 30; resultatet är att metoden returnerar 30 Anta att minnet är: namn: month typ: int variabel, dvs en minnesplats 6