Föreläsning 7. Nyckelord I Java. Uttryck. Uttryck, Operatorer Och Kontrollflöden

Relevanta dokument
F4. programmeringsteknik och Matlab

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

Lektion 4. Datateknik A, Java I, 5 poäng

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

1 Datorn som miniräknare. 1.1 Räkneoperationer. 1.2 Variabler

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

E02 "The Review" Föreläsning 2, HT2013 Grunderna, repetition. Johan Leitet. Kurs: 1dv403 Webbteknik I

F2 Datatyper och variabler. ID1004 Objektorienterad programmering Fredrik Kilander

F5 Selektion och iteration. ID1004 Objektorienterad programmering Fredrik Kilander

Programmering A. Johan Eliasson

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

SMD 134 Objektorienterad programmering

Övning2. Variabler. Data typer

Heltalsrepresentation. Fler byggstenar. Overflow och Underflow. TvŒ-komplement. FlyttalsvŠrden. Fyra heltalstyper. Tecken-bit

Programmeringsteknik I

Dagens föreläsning. Repetition. Repetition - Programmering i C. Repetition - Vad C består av. Repetition Ett första C-program

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

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

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

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

OOP Objekt-orienterad programmering

TDDC77 Objektorienterad Programmering

TDIU01 - Programmering i C++, grundkurs

Parameteröverföring. Exempel. Exempel. Metodkropp

Föreläsning 2 - Intro till Java

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

LÖSNINGSFÖRSLAG TENTAMEN

OOP Objekt-orienterad programmering

Objektorienterad Programmering (TDDC77)

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

TDDC77 Objektorienterad Programmering

Objektorienterad Programmering (TDDC77)

l uppgiftsformulering l algoritmkonstruktion l verifikation l kodning l testning och avlusning l validering l dokumentering l underhœll Kapitel 2

Språkkonventioner och redigering av tal.

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Strukturdiagram. Styra. Algoritmer. Val

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

Introduktion C-programmering

TDIU01 - Programmering i C++, grundkurs

1 Programmering i Java. Program element - Introduktion. Exempel. Exempel. Kapitel 3:

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

F4 Klasser och Metoder. ID1004 Objektorienterad programmering Fredrik Kilander

Tentamen ID1004 Objektorienterad programmering October 29, 2013

Typkonvertering. Java versus C

DD1314 Programmeringsteknik

Objektorienterad programmering Föreläsning 4

Programmering för språkteknologer I, VT2012. Rum

Data, typ, selektion, iteration

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

Arv: Fordonsexempel. Arv. Arv: fordonsexempel (forts) Arv: Ett exempel. En klassdefinition class A extends B {... }

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Tentamen ID1004 Objektorienterad programmering December 15, 2012

Repetition C-programmering

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Enkla datatyper minne

Programstruktur och terminologi. Programmet producerar följande utskrift i terminalfönstret: Ett Javaprogram består av en eller flera klasser

F1 - Introduktion. ID1004 Objektorienterad programmering Fredrik Kilander

Outline. For. I istället för att följa det normala ordningen, man ändra den. I i Java får man inte göra hopp hur som helst

JAVAUTVECKLING LEKTION 3

Hej Då, Karel! Programmering. Vårt första Javaprogram. hh.se/db2004. Java. Grundtyper, variabler och arrayer

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

LÖSNINGSFÖRSLAG TENTAMEN

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 4 Erik Nilsson, Institutionen för Datavetenskap, LiU

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Variabler, värden och typer

Objektorienterad programmering i Java

TDDE10 m.fl. Objektorienterad programmering i Java Föreläsning 6 Erik Nilsson, Institutionen för Datavetenskap, LiU

Innehållsförteckning

float Mindre rella tal ( floating point number ) double Rella tal/flyttal ( double precision floating point number )

Språket Python - Del 1 Grundkurs i programmering med Python

Lite logik. Kap 6: Sid 2

Föreläsning 2 sept 05 (Onsdag v 36). DD Chapter 2.

Föreläsning 3. Stack

TDDC77 Objektorienterad Programmering

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

System.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Variabler, värden och typer

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

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

1/15/2013. DD1310/DD1314/DA3009 Programmeringsteknik. Lärandemål... Vilka läser kursen? ...fler lärandemål VARFÖR? Föreläsning 1

DD1310/DD1314/DA3009 Programmeringsteknik LÄRANDEMÅL... Vilka läser kursen? ...FLER LÄRANDEMÅL. Föreläsning 1

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Tentamen OOP

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

Föreläsning 3-4 Innehåll

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy cards. Slingor

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

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 2. Variabler, tilldelning och kodblock{} if-satsen Logiska operatorer Andra operatorer Att programmera

Imperativ programmering. Föreläsning 2

DD2310. Javaprogrammering för Pythonprogrammerare. Johan Boye

I STONE. I Variabler, datatyper, typkonvertering. I Logiska och matematiska uttryck. I Metoder-returvärde och parametrar. I Villkorssatser if/else

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Föreläsning 2. Föreläsningen kommer ta upp valda delar av detta

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

OOP Objekt-orienterad programmering

Transkript:

Föreläsning 7 Uttryck, Operatorer Och Kontrollflöden Nyckelord I Java abstract double int super boolean else interface switch break extends long synchronized byte final native this case finally new throw catch float package throws char for private transient class goto protected try const if public void continue implements return volatile default import short while do instanceof static Uttryck Beskriver en bearbetning eller jämförelse Har alltid ett resultat Resultatet har en typ och ett värde Beskrivs genom att en operator appliceras på en eller flera operander 5 + 2 // Operatorn + appliceras på operanderna 5 och 2 // Resultatet av uttrycket är av typen int och har värdet 7 1

Sammansatta Uttryck Ett uttryck kan sättas samman av flera uttryck x = 5 + 2 // Operatorn = appliceras på operanderna x och (uttrycket) 5+2 // Resultatet av uttrycket är av typen int och har värdet 7 Uttrycket har fortfarande ett resultat som kan användas vidare z = 3 + (x = 5 + 2) Prioritet Och Associativitet För att ett givet uttryck ska alltid ge ett bestämt resultat finns det regler hur ett uttryck ska evalueras Prioritering av operatorerna 5 * 6 5 // prioritet Tillämpning av associativitet 60 / 6 * 5 // vänsterassociativitet a = b = c = 42 // högerassociativitet Med parenteser kan evalueringsordningen bestämmas x = ((a + b) * (c / d)) - 42; Primitivatyper boolean char byte short int long float double boolsk typ 16-bitar Unicode 8-bitars heltal 16-bitars heltal 32-bitars heltal 64-bitars heltal 32-bitars flyttal 64-bitars flyttal Samtliga typer är definierade i detalj, vilket innebär att t.ex en int alltid är 32 bitar 2

Wrapper-klasser Hantera primitivatyper som objekt Finns för samtliga primitivatyper Används bl.a. till att konvertera en sträng till en primitiv typ String tal = "33"; int alder = Integer.parseInt(tal); double pi = Double.parseDouble("3.1415"); String s = Integer.toString(alder); boolean Har två möjliga värden eller (sant eller falskt) Booleska uttryck har ett resultat som också är eller Används i kontrollflödeskonstruktion eller som flaggor // Fält private boolean a; // Sätts till private boolean b = ; // Lokala variabler boolean isdone = ; boolean istrue = (2 + 2 == 4); && (and) Booleska operatorer Båda operanderna sanna = uttrycket sant Någon eller båda operanderna falska = uttrycket falskt op1 op2 op1 && op2 boolean op1 = ; boolean op2 = ; boolean and = op1 && op2; (or) Någon eller båda operanderna sanna = uttrycket sant Båda operanderna falska = uttrycket falskt op1 op2 op1 op2 boolean op1 = ; boolean op2 = ; boolean or = op1 op2; ^ (xor) Båda operanderna samma värden = uttrycket falskt Båda operanderna olika värden = uttrycket sant op1 op2 op1 ^ op2 boolean op1 = ; boolean op2 = ; boolean xor = op1 ^ op2;! (not) Är operanden sann = uttrycket falskt Är operanden falsk = uttrycket sant boolean op1 = ; boolean op2 = ; boolean not =!op1; op1 op2!op1 3

Prioritet Och Associativitet Prioritet 1 2 3 4 5 Operator ( )! && ^ Typ parenteser NOT AND XOR OR Alla booleska operatorer har vänsterassociativitet Numeriska Data(typer) Typ byte short int long float double Antal Bitar 8 16 32 64 32 64 Värdeområde -128 till 127-32.768 till 32.767-2.147.483.648 till 2.147.483.647-9.223.372.036.854.775.808 till 9.223.372.036.854.775.807-3.40292347 E+38 till 3.40292347 E+38-1.79769313486231570 E+308 till 1.79769313486231570 E+308 I Java är en typs storlek en del av javadefinitionen vilket gör den lika stor på alla olika plattformar Numeriska Data (precision) Brist på precision kan medföra avrundningsfel. En float har 8 värdesiffror En double har 17 värdesiffror float a = 12345.6789; float b = 0.123456789; avrundas till: a = 12345.679; b = 0.12345679; 4

Aritmetiska Operatorer Operatorer Operation addition subtraktion multiplikation division modulus Operator + - * / % Java m +2 m 2 m * 2 m / 2 m % 2 Algebra m + 2 m - 2 2m, m 2 m 2 m modulo 2 Prioritet Prioritet 1 2 3 Operator ( ) * / % Heltalsdivision resulterar i ett heltal 3 / 2 1 // Heltal 3.0 / 2.0 1.5 // Decimaltal 3 / 2.0 1.5 // Decimaltal 3.0 / 2 1.5 // Decimaltal + - Inkrementeringsoperatorer Används för att öka eller minska ett värde med 1 (++, --) Start Uttryck Operation Tolkning Resultat int j = 0, k = 0; j = ++k; prefix k = k + 1, j = k; j är nu 1 och k är 1 int j = 0, k = 0; j = k++; postfix j = k, k = k + 1 j är nu 0 och k är 1 int j = 1, k = 1; j = --k; prefix k = k 1, j = k j är nu 0 och k är 0 int j = 1, k = 1; j = k--; postfix j = k, k = k - 1 j är nu 1 och k är 0 Använd först k, öka det sedan Öka först k, använd det sedan Tilldelningsoperatorer Tilldelar ett värde till en variabel Kan kombineras med andra vanliga operatorer Operator = += -= *= /= %= Typ Vanlig tilldelning Addition, sen tilldelning Subtraktion, sen tilldelning Multiplikation, sen tilldelning Division, sen tilldelning Rest, sen tilldelning Exempel m = n; m += 3; m -= 3; m *= 3; m /= 3; m %= 3; Tolkning m = n; m = m + 3; m = m 3; m = m * 3; m = m / 3; m = m % 3; 5

Jämförelseoperatorer Används för att jämföra variabler och uttryck med varandra Resultatet är av typen boolean Används normalt i testuttryck för att styra flödet i ett program if (x >= 0) System.out.println( x är större än 0! ); if (x!= -1) System.out.println( x är skilt ifrån 1! ); Jämförelseoperatorer Används för att jämföra variabler och uttryck med varandra Resultatet är av typen boolean Operator Typ Exempel Resultat < mindre än 5 < 10 > större än 10 > 10 <= mindre än eller lika med 11 <= 10 >= större än eller lika med 10 >= 10 == lika med 5 == 5!= ej lika med 5!= 5 Prioritet Prioritet 1 2 3 4 5 6 Operator ( ) ++ -- * / % + - < > <= >= ==!= Typ paranteser ökning, minskning multiplikation, division, modulus addition, subtraktion mindre-, större än (eller lika med) är lika med, skiljt ifrån Använd paranteser för att tydliggöra 6

Villkorsoperatorn Består av tre operander som alla kan vara uttryck Syntax: op1? op2 : op3 Om op1 är sant blir hela uttrycket = op2, annars = op3 Vad gör nedanstående sats? x = (a < b? a : b) char Ett tecken i Java representeras av ett 16-bits positivt heltal Totalt 2 16 = 65536 tecken Java använder Unicode som teckenset char ch = 'a'; System.out.println('b'); // skriver ut b System.out.println(ch); // skriver ut a System.out.println((int)ch); // skriver ut 97 Typkonverteringar För att tilldela en variabel ett värde krävs att detta är av samma typ som variabeln, eller går att konvertera till detta. Implicit (automatisk) konvertering sker om ingen information riskerar att förloras. Från liten typ till större. Explicit konvertering tvingas fram genom en s.k cast. Från strörre typ till mindre 7

Implicit Typkonvertering int i = 13; // automatisk "cast" double d = i; // ok, double rymmer en int short s = i; // fel, short rymmer inte en int När två olika typer ingår i ett uttryck, så konverteras automatiskt den mindre typen till den större innan uttrycket beräknas int i = 3; double d = 2.0; double svar = i / d; // 3 / 2.0 3.0 / 2.0 1.5 Explicit Typkonvertering long j = 13; // påtvingad "cast" int i = (int)j; // long (64 bit) int (32 bit) double d = 3.1415; float f = (float)d; // Kan tappa precision!! int i2 = (int)d; // Tappar decimaldelen Ett flyttal som typas om till en int tappar sin decimaldel (3.14 blir 3) Ett större flyttal som typas om till ett mindre tappar i precision Ett större heltal som typas om till ett mindre kapar bort de högsta bitarna Föreläsning 7 Kontrollflöden 8

Bakgrund All aktivitet sker i metoder Metoder består av programsatser deklarationssatser exekveringssatser Programsatser utförs sekventiellt (i tur och ordning) Ordningen kan dock styras m.h.a kontrollflöden Block Grupperar ihop programsatser till en sammansatt sats Kan användas överallt där en sats är tillåten Ramas in med klamrar... if (wife.ishappy() == ) bag.pack(ball, shoes, beer); friend.call("bowling?"); if (friend.answer().equals("yes")) wife.leavemessage("working late"); Åtkomst (scope) Inom en klass begränsas variablers åtkomst av blocken public void minmetod() int x = 99; int a = 3; if (x < 100) int b = x++; // ok, x nås härifrån int c = a; // ok, a nås härifrån System.out.println(b); // ERROR b nås ej! System.out.println(x); // ok, x nås härifrån 9

Flödeskontroller Typ Villkor Iteration Avbrott Konstruktioner if-else switch while do-while for break continue return if if (condition) block tal > 0 Skriv ut Positivt på skärmen Sätt tal till 1 Fortsätt här // någon kod if (tal > 0) System.out.println("Positivt"); tal = 1; // någon kod if-else if (condition) block1 else block2 tal > 0 Skriv ut Positivt Skriv ut Negativt på skärmen på skärmen Sätt tal till 1 Sätt tal till -1 Fortsätt här // någon kod if (tal > 0) System.out.println("Positivt"); tal = 1; else System.out.println("Negativt"); tal = -1; // någon kod 10

if-else if if (condition1) block1 else if (condition2) block2 else block3 tal > 0 Skriv ut Positivt på skärmen Sätt tal till 1 tal < 0 Skriv ut Negativt på skärmen Sätt tal till -1 tal == 0 Skriv ut Noll på skärmen Sätt tal till 0 Skriv ut Fel!! Fortsätt här if-else-if if (tal > 0) System.out.println("Positivt"); tal = 1; else if (tal < 0) System.out.println("Negativt"); tal = -1; else if (tal == 0) System.out.println("Noll"); tal = 0; else System.out.println("Fel!!"); switch Multipla val fast endast heltal (+ char) kan användas int val = Integer.parseInt(s); switch(val) case 1: System.out.println("Du skrev en 1:a"); break; case 2: System.out.println("Du skrev en 2:a"); break; case 3: System.out.println("Du skrev en 3:a"); break; case 4: case 5: System.out.println("Du skrev en 4:a eller 5:a"); break; default: System.out.println("Ogiltigt värde!"); 11

for for (initiering; test; förändring) block i = 0 i < 10 Skriv ut i for (int i = 0; i < 10; i++) System.out.println("rad" + i); i++ while n = läs in tal while (condition) block n > 0 Skriv ut n dela n med 2 Skriv ut n int n = Integer.parseInt(s); while (n > 0) System.out.println("n = " +n); n /= 2; // n = n / 2; System.out.println(n); do-while do block while (condition) int tal = 0; print "Ange ett tal" tal = inläsning mellan 1 och 5 int tal = 0; do System.out.print( "Ange ett tal mellan 1 och 5: "); String s = input.readline(); tal = Integer.parseInt(s); while (!(tal >= 1 && tal <= 5)); 12

break avslutar en loop tidigare i = 0 i < 10 i == 5 Skriv ut i i++ break for (int i = 0; i < 10; i++) if (i == 5) break; System.out.print(i + " "); 0 1 2 3 4 continue hoppar över resten av loopen i = 0 i <=10 i == 5 print i i++ continue for (int i = 0; i < 10; i++) if (i == 5) continue; System.out.print(i + " "); 0 1 2 3 4 6 7 8 9 return Avslutar exekveringen av en metod Har metoden en returtyp måste ett kompatibelt värde skickas med Är returtypen void behövs inget returvärde anges Används normalt sist i en metod public boolean isnegative(int number) if (number < 0) return ; else return ; 13

Klassen Math Kan utföra mer avancerade matematiska beräkningar (än +,-,* etc) Finns i paketet java.lang (ej import) Innehåller endast statiska metoder int abs(int x) Math.abs(-12) 12 double pow(double x, double y) Math.pow(2, 8) 256.0 double sqrt(double x) Math.sqrt(25) 5.0 int max(int x, int y) Math.max(5, 1) 5 int min(int x, int y) Math.min(5, 1) 1 long round(double x) Math.round(5,49) 5 double sin(double x) Math.sin(30) 0.5 double random() Math.random() 0.0 1.0 Se API:n för fler metoder 14