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

Slides:



Advertisements
Liknande presentationer
INTRODUKTION TILL PROGRAMMERING
Advertisements

Repetition av språket Java
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.
Villkor Booelska operatorer Villkorsatser Switchsatser Villkor och annat.
Föreläsning 3 Repetition Operatorer Styrstrukturer Deklaration och anrop av metoder.
De fundamentala datatyperna
Datatyper C# C/C++ Java VB Fortran Pascal bool boolean Boolean
Operatorer.
Om Java C =>Java syntax variabler metoder färdiga klasser
Välkommen Vahid Mosavat
Att programmera i språket Java
Grundläggande programmering
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Strömmar Vid läsning och skrivning används något som kallas strömmar.
Programmering i C# 2. Inledande detaljer.
Programmering B PHP Lektion 2
Anders Sjögren Selektion i C ”vägval” if och switch - satserna.
Föreläsning 11 Arrayer.
OOP F4:1 Marie Olsson OOP Objekt-orienterad programmering Föreläsning 4 Metoder klass-metoder instans-metoder.
Programmering i C# 3. Klasser.
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.
Vektorer (klassen Vector) Sortering
Internet A Javaskript.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
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.
Arrayer och strängar Arrayer Strängar operatorer typkonvertering.
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.
Objektorienterad programmering i Java
Föreläsning 10 Stränghantering.
Föreläsning 1 Reserverade ord Javas API Identifierare Litteraler Variabler Kompilering och interpretering.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Föreläsning 4 Klasser Och Objekt.
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.
INTRODUKTION TILL PROGRAMMERING
Digitalitet.
2D1311 Programmeringsteknik med PBL
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
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.
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.
Övning2 programmeringsteknik och Matlab 2D1312/ 2D1305
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
-Repetition -Variabler -Primitiva typer (+ boolean) -Operatörer +, ++, --, -Typ konvertering -Wrapper klasser -Jämförelse operatörer,(==, =,,!=, !) -String.
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
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.
Anders Sjögren Mer om datatyper. Anders Sjögren const det finns ett elegantare sätt att skapa konstanter i C än sättet med makro som vi använt tidigare.
OOP&M - teori1 OOP – Föreläsning 7 (Sista oop I) Konstruktioner för att hantera upprepningar Kapitel 11.
Selektion jämförande och logiska operatorer
Anders Sjögren Operatorer. Anders Sjögren Operand(er)
Anders Sjögren Programmering i ANSI-C Ett första program för att se vart vi ska...
Mer om operatorer logiska operatorer bit-operatorer adress-operatorn ”komma”-operatorn punkt - operatorn.
Lektion 4.
Föreläsning 3: Booleans, if, switch
Presentationens avskrift:

Föreläsning 7 Uttryck, Operatorer Och Kontrollflöden

Nyckelord I Java abstractdoubleintsuper booleanelseinterfaceswitch breakextendslongsynchronized bytefinalnativethis casefinallynewthrow catchfloatpackagethrows charforprivatetransient classgotoprotectedtry constifpublicvoid continueimplementsreturnvolatile defaultimportshortwhile doinstanceofstatic

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 // Operatorn + appliceras på operanderna 5 och 2 // Resultatet av uttrycket är av typen int och har värdet 7

Sammansatta Uttryck Ett uttryck kan sättas samman av flera uttryck x = // 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 evaluerings- ordningen bestämmas x = ((a + b) * (c / d)) - 42;

Primitivatyper boolean boolsk typ char 16-bitar Unicode byte 8-bitars heltal short 16-bitars heltal int 32-bitars heltal long 64-bitars heltal float 32-bitars flyttal double 64-bitars flyttal Samtliga typer är definierade i detalj, vilket innebär att t.ex en int alltid är 32 bitar

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 true eller false (sant eller falskt) Booleska uttryck har ett resultat som också är true eller false Används i kontrollflödeskonstruktion eller som ”flaggor” // Fält private boolean a; // Sätts till false private boolean b = true; // Lokala variabler boolean isDone = false; boolean isTrue = (2 + 2 == 4);

Booleska operatorer && (and) Båda operanderna sanna = uttrycket sant Någon eller båda operanderna falska = uttrycket falskt boolean op1 = true; boolean op2 = false; boolean and = op1 && op2; op1op2op1 && op2 true false truefalse || (or) Någon eller båda operanderna sanna = uttrycket sant Båda operanderna falska = uttrycket falskt boolean op1 = true; boolean op2 = false; boolean or = op1 || op2; op1op2op1 || op2 true falsetrue falsetrue false ^ (xor) Båda operanderna samma värden = uttrycket falskt Båda operanderna olika värden = uttrycket sant boolean op1 = true; boolean op2 = false; boolean xor = op1 ^ op2; op1op2op1 ^ op2 true false truefalsetrue falsetrue false ! (not) Är operanden sann = uttrycket falskt Är operanden falsk = uttrycket sant boolean op1 = true; boolean op2 = false; boolean not = !op1; op1op2!op1 true false truefalse true false true

Prioritet Och Associativitet PrioritetOperatorTyp 1( )parenteser 2!NOT 3&&AND 4^XOR 5||OR Alla booleska operatorer har vänster- associativitet

Numeriska Data(typer) TypAntal BitarVärdeområde byte8-128 till 127 short till int till long till float E+38 till E+38 double E+308 till 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 = ; float b = ; a = ; b = ; avrundas till:

Aritmetiska Operatorer Operatorer OperationOperatorJavaAlgebra addition+m +2 subtraktion-m – 2m - 2 multiplikation*m * 22m, m · 2 division/m / 2 modulus%m % 2m modulo 2 PrioritetOperator 1( ) 2* / % 3+ - Prioritet 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 StartUttryckOperationTolkningResultat int j = 0, k = 0;j = ++k;prefixk = k + 1, j = k;j är nu 1 och k är 1 int j = 0, k = 0;j = k++;postfixj = k, k = k + 1j är nu 0 och k är 1 int j = 1, k = 1;j = --k;prefixk = k – 1, j = kj är nu 0 och k är 0 int j = 1, k = 1;j = k--;postfixj = k, k = k - 1j är nu 1 och k är 0 Använd först k, öka det sedan Används för att öka eller minska ett värde med 1 (++, --) Öka först k, använd det sedan

Tilldelningsoperatorer OperatorTypExempelTolkning =Vanlig tilldelningm = n; +=Addition, sen tilldelningm += 3;m = m + 3; -=Subtraktion, sen tilldelningm -= 3;m = m – 3; *=Multiplikation, sen tilldelningm *= 3;m = m * 3; /=Division, sen tilldelningm /= 3;m = m / 3; %=Rest, sen tilldelningm %= 3;m = m % 3; Tilldelar ett värde till en variabel Kan kombineras med andra vanliga operatorer

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 OperatorTypExempelResultat <mindre än5 < 10true >större än10 > 10false <=mindre än eller lika med11 <= 10false >=större än eller lika med10 >= 10true ==lika med5 == 5true !=ej lika med5 != 5false Används för att jämföra variabler och uttryck med varandra Resultatet är av typen boolean

Prioritet OperatorTyp 1( )paranteser ökning, minskning 3* / %multiplikation, division, modulus 4+ -addition, subtraktion 5 =mindre-, större än (eller lika med) 6== !=är lika med, skiljt ifrån Använd paranteser för att tydliggöra

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 = 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

Implicit Typkonvertering 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 = 13; // automatisk "cast" double d = i; // ok, double rymmer en int short s = i; // fel, short rymmer inte en int int i = 3; double d = 2.0; double svar = i / d; // 3 / 2.0  3.0 / 2.0  1.5

Explicit Typkonvertering 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 long j = 13; // påtvingad "cast" int i = (int)j; // long (64 bit)  int (32 bit) double d = ; float f = (float)d; // Kan tappa precision!! int i2 = (int)d; // Tappar decimaldelen

Föreläsning 7 Kontrollflöden

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() == true) { 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 }

Flödeskontroller TypKonstruktioner Villkorif-else switch Iterationwhile do-while for Avbrottbreak continue return

if if (condition) {block} Skriv ut ”Positivt” på skärmen Sätt tal till 1 Fortsätt här tal > 0 false true // någon kod if (tal > 0) { System.out.println("Positivt"); tal = 1; } // någon kod

if-else if (condition) {block1} else {block2} // någon kod if (tal > 0) { System.out.println("Positivt"); tal = 1; } else { System.out.println("Negativt"); tal = -1; } // någon kod Skriv ut ”Positivt” på skärmen Sätt tal till 1 Fortsätt här tal > 0 falsetrue Skriv ut ”Negativt” på skärmen Sätt tal till -1

if-else if if (condition1) {block1} else if (condition2) {block2} else {block3} Skriv ut ”Positivt” på skärmen Fortsätt här tal > 0 false true Sätt tal till 1 tal < 0 tal == 0 Skriv ut ”Negativt” på skärmen true Sätt tal till -1 Skriv ut ”Noll” på skärmen true Sätt tal till 0 Skriv ut ”Fel!!” false

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!"); }

for for (initiering; test; förändring) {block} for (int i = 0; i < 10; i++) { System.out.println("rad" + i); } false Skriv ut i i++ i < 10 true i = 0

while while (condition) {block} int n = Integer.parseInt(s); while (n > 0) { System.out.println("n = " +n); n /= 2; // n = n / 2; } System.out.println(n); n = läs in tal n > 0 false true Skriv ut n dela n med 2 Skriv ut n

do-while do {block} while (condition) 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)); int tal = 0; mellan 1 och 5 true tal = inläsning print "Ange ett tal" false

break avslutar en loop tidigare for (int i = 0; i < 10; i++) { if (i == 5) { break; } System.out.print(i + " "); } Skriv ut i i++ i < 10 false true i = 0 i == 5 true break false

continue hoppar över resten av loopen for (int i = 0; i < 10; i++) { if (i == 5) { continue; } System.out.print(i + " "); } print i i++ i <=10 false true i = 0 i == 5 true continue false

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 true; else return false; }

Klassen Math Kan utföra mer avancerade mate- matiska 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)  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