Forelsning Uge 2 Mandag Stninger Simple stninger assignment

  • Slides: 28
Download presentation
Forelæsning Uge 2 – Mandag • Sætninger – Simple sætninger (assignment, interne og eksterne

Forelæsning Uge 2 – Mandag • Sætninger – Simple sætninger (assignment, interne og eksterne metodekald) – Sammensatte sætninger (blok, selektion, gentagelse) • Udtryk og operatorer • Java syntax og style guide • Afleveringsopgave: Raflebæger 2 (Die. Cup 2) På Projekt Euler og Coding. Bats findes en masse ekstra opgaver, hvor I kan øve jer i Java programmering, hvis I har tid tilovers Links under Uge 3 på Ugeoversigten (Uge 1 -7)

● Simple sætninger • Assignment (ændring af variabels værdi) – Udregner værdien af udtrykket

● Simple sætninger • Assignment (ændring af variabels værdi) – Udregner værdien af udtrykket på højresiden og tildeler denne værdi til variablen på venstresiden v = exp; age = age + 1; age += 1; Udtrykkets type skal matche variablens type age++; • Return sætning (inde i accessor metode) return exp; return age; return name; Udtrykkets type skal matche metodens returtype 2

Metodekald • Internt metodekald – Kald af metode i samme objekt method(…); is. Teenager();

Metodekald • Internt metodekald – Kald af metode i samme objekt method(…); is. Teenager(); Den værdi man bruger for en parameter skal matche parameterens type set. Name("Maria"); • Eksternt metodekald – Kald af metode i andet objekt – Dot notation (dot = punktum på amerikansk) object-reference. method(…); p 1. is. Teenager(); p 1. set. Name("Maria"); p 1. set. Farther(p 2); Den værdi man bruger for en parameter skal matche parameterens type Metoden skal være erklæret i objektreferencens type (der er en klasse) 3

Sammensatte sætninger • Blok – Sekvens af sætninger (omgivet af krøllede parenteser) – Parenteserne

Sammensatte sætninger • Blok – Sekvens af sætninger (omgivet af krøllede parenteser) – Parenteserne gør, at blokken opfattes som én sætning, og dermed kan bruges alle de steder, hvor man kan bruge en sætning {S 1 S 2 … Sn} public Person(String n, int a) { name = n; age = a; } Blok med to assignment sætninger 4

● Selektion (valg) – if sætning if(exp) S S exp skal evaluere til en

● Selektion (valg) – if sætning if(exp) S S exp skal evaluere til en sandhedsværdi (boolean) public void insert. Money(int amount) { if( amount > 0 ) { S udføres kun, hvis balance = balance + amount; exp evaluerer til true } } 5

Valg mellem to blokke – if-else sætning if(exp) S 1 else s 2 S

Valg mellem to blokke – if-else sætning if(exp) S 1 else s 2 S 1 S 2 exp skal evaluere til en sandhedsværdi (boolean) public void insert. Money(int amount) { if(amount > 0) { Hvis exp evaluerer til balance = balance + amount; true udføres S 1 } else { Hvis exp evaluerer til // Udskriv fejlmeddelelse false udføres S 2 System. out. println("Error"); } } 6

Lidt mere kompakt public void insert. Money(int amount) { if(amount > 0) { balance

Lidt mere kompakt public void insert. Money(int amount) { if(amount > 0) { balance = balance + amount; For at spare plads, kan } startparentesen i en blok sættes på samme linje, else { som det der går forud // Udskriv fejlmeddelelse System. out. println("Error"); } } • Vi sætter altid krøllede parenteser omkring if- og else-delen • Også når der kun er én sætning if(amount > 0) { balance += amount; } 7

Indlejret selektion • Datoer repræsenteres ved hjælp af tre feltvariabler (day, month, year) –

Indlejret selektion • Datoer repræsenteres ved hjælp af tre feltvariabler (day, month, year) – Metoden next. Day ændrer tre feltvariabler, så de repræsenterer den efterfølgende dag – Det antages, at alle måneder har 30 dage public void next. Day() { day = day + 1; if(day > 30) { day = 1; month = month + 1; if(month > 12) { month = 1; year = year + 1; } } } Den røde if sætning er indlejret i den grønne if sætning 8

Selektion mellem mange – switch sætning Ugedag repræsenteret som heltal Metode, der konverterer fra

Selektion mellem mange – switch sætning Ugedag repræsenteret som heltal Metode, der konverterer fra heltal til tekststreng (f. eks. 3 "Wednesday", 6 og 7 "Weekend", 0 "Invalid day") int day; // 1 = Monday // 2 = Tuesday // 3 = Wednesday // 4 = Thursday // 5 = Friday // 6 = Saturday // 7 = Sunday public String convert. Day(int day) { switch(day) { case 1: return "Monday"; case 2: return "Tuesday"; case 3: return "Wednesday"; case 4: return "Thursday"; case 5: return "Friday"; case 6: case 7: return "Weekend"; default: return "Invalid day"; } • Mere information om selektion: Appendix D • Normalt adskilles de enkelte cases med et break, der stopper udførelsen af switch sætningen • Dette er ikke nødvendigt her, idet return også stopper sætningen 9

Selektion i udtryk – ved hjælp af ? og : • Vi har set,

Selektion i udtryk – ved hjælp af ? og : • Vi har set, hvordan man i en if (eller switch) sætning kan selektere mellem forskellige (blokke af) sætninger • Analogt kan man i et udtryk selektere mellem to forskellige udtryk (exp ? exp 1 : exp 2) – exp skal være et boolsk udtryk, mens exp 1 og exp 2 skal have matchende typer (f. eks. begge være af typen int) – Hvis exp evaluerer til true evalueres exp 1 (og værdien af exp 1 er værdien af det samlede selektionsudtryk) – Hvis exp evaluerer til false evalueres exp 2 (og værdien af exp 2 er værdien af det samlede selektionsudtryk) – Både exp 1 og exp 2 skal være til stede (et udtryk skal jo altid evaluere til en værdi) 10

Selektion i udtryk (eksempler) Bank eksempel (fra før) if(amount > 0) { balance =

Selektion i udtryk (eksempler) Bank eksempel (fra før) if(amount > 0) { balance = balance + amount; } Alternativt balance += ( amount > 0 ? amount : 0 ); Evaluer højresiden og adder resultatet til venstresiden Udskrift af to næsten identiske strenge System. out. println("text 1" + (exp ? "text 2 a" : "text 2 b") + "text 3"); • Mere information om selektion i udtryk: Sektion 7. 5. 1 11

Eksempel på dårlig kode public boolean is. Teenager() { boolean result; } if( 13

Eksempel på dårlig kode public boolean is. Teenager() { boolean result; } if( 13 <= age && age <= 19 ) { result = true; } boolsk udtryk else { result = false; } return result; public boolean is. Teenager() { return (13 <= age && age <= 19); } Metoden tjekker om personen er teenager Hvordan er korrekt, men unødvendig lang og kompliceret Hvordan kan den simplificeres? 8 linjer kode 1 linje kode 12

Andet eksempel på dårlig kode if( female == true ) {. . . }

Andet eksempel på dårlig kode if( female == true ) {. . . } variabel af type boolean (boolsk udtryk) if( female == false ) {. . . } if( female ) {. . . } negation if( ! female ) {. . . } • Helt galt går det, hvis man kommer til at skrive if( female = true ) {. . . } if( female = false ) {. . . } – Assignment, som ændrer værdien af female – Hvorfor klager oversætteren ikke? Parenteserne skal jo indeholde et boolsk udtryk Parenteserne indeholder lovlige boolske udtryk, men de tester ikke det, vi havde til hensigt, og de ændrer female x = y = 37; Assignment, men også et udtryk med værdien 37, som så assignes til x 13

● Iteration (gentagelse) – for løkke Start ERKLÆRING + INITIALISERING af lokal variabel TEST

● Iteration (gentagelse) – for løkke Start ERKLÆRING + INITIALISERING af lokal variabel TEST (boolsk udftryk) • Falsk • Sand Keyword (reserveret ord) KROP (de sætninger, der skal gentages) OPDATERING for ( declare ; test ; update ) S 14

while løkke Start TEST (boolsk udtryk) • Falsk • Sand Keyword (reserveret ord) while

while løkke Start TEST (boolsk udtryk) • Falsk • Sand Keyword (reserveret ord) while ( test ) S KROP (de sætninger, der skal gentages) • while løkken er simplere og mere fleksibel • Vi skal selv huske at – erklære og initialisere en passende variabel – opdatere denne inde i kroppen 15

do-while løkke TEST (boolsk udtryk) • Falsk • Sand Keywords (reserverede ord) Start KROP

do-while løkke TEST (boolsk udtryk) • Falsk • Sand Keywords (reserverede ord) Start KROP (de sætninger, der skal gentages) • Vi starter med at udføre kroppen do S while( test ) – Det betyder at kroppen altid udføres mindst én gang • Vi skal (også her) selv huske at – erklære og initialisere en passende variabel – opdatere denne inde i kroppen 16

Eksempler på iteration: polygon for løkke while løkke do-while løkke for(int i = 0;

Eksempler på iteration: polygon for løkke while løkke do-while løkke for(int i = 0; i < n; i++) { move(size); turn(360. 0 / n); } int i = 0; while(i < n) { move(size); turn(360. 0 / n); i++; } int i = 0; do { move(size); turn(360. 0 / n); i++; } while(i < n) • De tre løkker gør det samme – De gentager move og turn operationerne n gange • Forskelle – for løkker bruges, når man på forhånd ved, hvor mange gange løkken skal gennemløbes – De to andre slags løkker er mere fleksible, men her skal man selv huske at erklære/initialisere og opdatere – I en do-while løkke udføres kroppen altid mindst én gang • Er der situationer, hvor der er forskel på hvad ovenstående løkker gør? • Mere information om iteration: Appendix D 17

● Udtryk bruges mange forskellige steder • Højresiden af assignment – Udtrykkets type skal

● Udtryk bruges mange forskellige steder • Højresiden af assignment – Udtrykkets type skal matche variablens type • Return sætning (inde i accessor metoder) – Udtrykkets type skal matche metodens returtype • Argumenter til metodekald – Argumentets type skal matche parameterens type • Hvad betyder det at to typer matcher? – Det er opfyldt hvis de to typer er identiske – Senere skal vi se, at typer også kan matche på anden vis • Betingelser i selektions- og iterationssætninger – Udtrykkets type skal være boolean (dvs. det skal evaluerer til en sandhedsværdi, true eller false) – Boolsk udtryk 18

Udvalgte operatorer • Nogle operatorer er overloadede Aritmetiske operatorer + - * / %

Udvalgte operatorer • Nogle operatorer er overloadede Aritmetiske operatorer + - * / % . . . Logiske operatorer && || ! . . . ^ bitvis eksklusiv OR • Præcedens regler Relationelle operatorer == != < > – Kan bruges på argumenter af forskellig type + kan betyde læg sammen + kan også betyde konkatenation (sammensætning af strenge) <= new er også en operator new Class(. . . ); >= – Bestemmer rækkefølgen, som operatorerne udføres i – 4 + 3 * 5 evaluerer til 19 • Java har 15 niveauer – Brug parenteser, når I er i tvivl • Mere om udtryk og operatorer: Appendix C Pause 19

● Syntaktiske elementer i Java • Reserverede ord (keywords) – class, new, public, if,

● Syntaktiske elementer i Java • Reserverede ord (keywords) – class, new, public, if, while, . . . • Navne (identifiers) – int, boolean, String, Person, Date, p 1, age, turn, move, day, month, year, . . . • Konstanter (literals) – "Aarhus Universitet", 1928, 5. 78, true, . . . • Specialtegn (special characters) – ; ( ) { } < > = + * / < <= == != ? : && | | !. . . – // /* */ /** @ • Luft (white space) – linjeskift, mellemrum, tab, . . . – kan indsættes vikårligt mellem syntaktiske elementer uden at betydningen påvirkes 20

Java style guide (regler for pæn kode) • Navngivning – Navne skrives på engelsk

Java style guide (regler for pæn kode) • Navngivning – Navne skrives på engelsk (eller amerikansk) og skal være velvalgte (beskrivende) – Klasser: med stort Camel. Case • eks. : Person, String, Number. Display, – Variabler og metodenavne: med lille camel. Case • eks. : first. Name, track. Name, display. String • Indrykning – Alt mellem { og } rykkes ét ’hak’ ind – For hvert ekstra niveau af parenteser rykkes endnu et ’hak’ ind public class Person { private int age; public Person() { age = 32; } } Blue. J editor • Blue. J styleguide: Appendix J public class Person { private int age; public Person() { age = 32; } } Mine slides z i u Q r e Click 21

Hvad gør nedenstående kode? 22

Hvad gør nedenstående kode? 22

Hvad gør nedenstående kode? Præcis det samme • Det er de samme instruktioner •

Hvad gør nedenstående kode? Præcis det samme • Det er de samme instruktioner • De er nu meget lettere at læse og forstå • Vi har været omhyggelige med linjeskift og indrykningerne, og brugt editorens Auto-layout funktion Bemærk at editoren bruger farver til at vise kodens komponenter • Grøn: Klassen • Gul: Konstruktører og metoder • Gråtoner: if sætninger, for løkker og lignende • Hvid: simple sætninger 23

● Afleveringsopgave: Raflebæger 2 (Die. Cup 2) • I Raflebæger 1 lavede I et

● Afleveringsopgave: Raflebæger 2 (Die. Cup 2) • I Raflebæger 1 lavede I et raflebæger med to terninger Die. Cup Die d 1 Die d 2 void roll() int get. Eyes() Die 2 int eyes void roll() int get. Eyes() • Nu skal I lave en Test. Driver klasse med to metoder, der kan bruges til en mere systematisk aftestning af Die. Cup og Die klasserne test() Skaber et raflebæger med to terninger, laver et kast med bægeret og udskriver resultatet af kastet test. Multiple(int no. Of. Rolls) Skaber et raflebæger, laver et specificeret (positivt) antal kast og udskriver resultatet af disse 24

Raflebæger 2 (Die. Cup 2) – fortsat • Dernæst skal I generalisere situationen, således

Raflebæger 2 (Die. Cup 2) – fortsat • Dernæst skal I generalisere situationen, således at terninger nu kan have et vilkårligt antal sider (≥ 2) – Det kræver bl. a. andet, at I ændrer konstruktøren for Die klassen, så den får en parameter, der angiver antallet af sider i terningen // Skaber terning med no. Of. Sides sider Die(int no. Of. Sides){. . . } – I skal også ændre konstruktøren for Die. Cup klassen, så den får to parametre, der angiver antallet af sider i de to terninger /** * Skaber et raflebæger med to terninger, * hvor den første har sides 1 sider og * den anden sides 2 sider */ Die. Cup(int sides 1, int sides 2){. . . } – Endelig skal I tilpasse metoderne i Test. Driver klassen, således at de kan anvendes til raflebægre, hvor terningerne har et variabelt antal sider 25

● Opsummering • Sætninger – Simple sætninger (assignment, interne og eksterne metodekald) – Sammensatte

● Opsummering • Sætninger – Simple sætninger (assignment, interne og eksterne metodekald) – Sammensatte sætninger (blok, selektion og iteration) • Udtryk – Operatorer, overloadning og præcedens regler / brug af parenteser • Java styleguide – Navngivning – Indrykning – Brug af parenteser SKAL følges ellers kommer instruktorerne efter jer , og I får genaflevering • Afleveringsopgave: Raflebæger 2 (Die. Cup 2) • Begrænset adgang til Blackboard den 9. -10. september på grund af flytning af servere til nyt datacenter – Sørg for at have downloadet opgaveformuleringer, projekter og lignende, som I skal bruge driftstatus. au. dk 26

CS Challenge • Den første CS challenge opgave er nu offentliggjort på: – cs.

CS Challenge • Den første CS challenge opgave er nu offentliggjort på: – cs. au. dk/Challenge – Deadline for aflevering er torsdag den 21. september – Du kan høre mere om CS challenge ved at møde op i studiecaféen tirsdag den 5. september kl 15. 00 – Her vil professor Michael Schwarzbach og Ph. D. studerende Martin Toldam Torp være til stede • Hvorfor være med – Sjovt og udfordrende – Fantastiske præmier ? ? ? 27

Det var alt for nu…. . … spørgsmål 28

Det var alt for nu…. . … spørgsmål 28