Föreläsning 2 • • • • • • • Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for Primitiva datatyper • Varje värde som lagras i minnet är av en viss datatyp • Java har åtta fördefinierade typer som kallas primitiva datatyper: byte short int long float double boolean char Heltal • Det finns fyra olika heltalstyper: Namn Storlek Min-värde Max-värde byte short int long 8 bitar 16 bitar 32 bitar 64 bitar -128 -32,768 -2,147,483,648 < -9 x 1018 127 32,767 2,147,483,647 > 9 x 1018 Flyttal • Det finns två flyttalstyper: Namn Storlek Min-värde Max-värde float double 32 bitar 64 bitar -3.4 x 1038 -1.7 x 10308 3.4 x 1038 1.7 x 10308 Tecken • I en variabel av typen char kan ett tecken lagras • Java använder teckenkodningssystemet Unicode som lagrar tecken i 16 bitar • Tecken från många olika språk finns med, däribland å, ä och ö. Se www.unicode.org • Teckenkonstanter omges av apostrofer, t ex ’a’ ’&’ ’\n’ (retur) ’\’’ (apostrof) Boolean • En boolesk variabel kan endast anta värdena true och false • Exempel: boolean parkering = false; • Booleska variabler används ofta i villkor Omslagsklasser (Wrapper classes) • För varje primitiv datatyp finns en motsvarande klass, t ex Datatyp Klass int double char boolean Integer Double Character Boolean • Dessa klasser innehåller en del användbara metoder t ex för att omvandla från strängar till tal Variabler och konstanter • Variabler kan tilldelas ett startvärde i deklarationen: double längd = 0.84; • Variabelns värde kan ändras senare i programmet. • Lägger man till ordet final får man en konstant, vars värde inte kan ändras: final double längd = 1.78; Tilldelning • En variabel kan ges ett nytt värde genom tilldelning: x = y + 8; x y • I tilldelningssatsens vänsterled står en variabel • Högerledet kan vara ett värde, en variabel eller ett uttryck Inläsning Användaren kan ge en variabel ett nytt värde om programmet läser in från tangentbordet: 1 Se till att eventuella fel skickas vidare public static void main (String[] args) throws IOException { 2 Tala om varifrån inläsningen ska ske BufferedReader stdin = new BufferedReader (new InputStreamReader (System.in)); 3 Läs in raden raden = stdin.readLine(); Inläsning av tal • Metoden readLine() läser in en sträng. Vid behov kan man omvandla strängen till ett tal heltal = Integer.parseInt(rad); • Inläsning och omvandling kan göras i ett steg: heltal = Integer.parseInt(stdin.readLine()); • Flyttal är lite krångligare: flyttal=(new Double(stdin.readLine())).doubleValue(); men i nästa version av Java (1.2) kan man skriva flyttal= Double.parseDouble(stdin.readLine()); Matematiska operatorer + * / / % 2.52 + 19 blir 21.52 4.18 - 0.02 blir 4.16 3.5 * 2 blir 7.0 19 / 4 blir 4 19 / 4.0 blir 4.75 19 % 4 blir 3 % ger resten vid heltalsdivision if-satsen • if-satsen används när ett villkor avgör vad som ska göras: if (ålder <11) System.out.println(”Barnförbjudet!”); • Man kan lägga till else för att tal om vad som ska hända om villkoret inte är uppfyllt: if (ålder <11) System.out.println(”Barnförbjudet!”); else System.out.println(”Välkommen!”); Jämförelseoperatorer • I villkor kan följande operatorer användas: == != < <= > >= lika med skilt från mindre än mindre än/lika med större än större än/lika med • Strängar kan inte jämföras med operatorerna ovan (eftersom strängar inte är primitiva datatyper) . Logiska operatorer • Villkor kan kombineras med följande tre operatorer: && || ! och eller icke a<5 && b<5 a<5 || b<5 !(a<5) • if (ålder <= 4 || ålder >= 21) System.out.println(”OK!”); Slingor • När man vill att vissa satser ska utföras flera gånger använder man en slinga. • För att visa vilka satser som ska upprepas sätter man { } runt dessa. • Man kan välja mellan att – ange ett villkor för hur länge satserna ska upprepas (while-slinga) – tala om hur många gånger satserna ska upprepas (for-slinga) while-slingan • Så länge som villkoret är uppfyllt utförs satserna: while (fortsätt == true) { /* Satser som upprepas */ } • Om villkoret passar bättre sist skriver man: do { /* Satser som upprepas */} while (fortsätt == true); Slingexempel - while // Beräknar tio tvåpotenser (s105 i boken) class Potens { public static void main(String[] args) { int varv=1, tvåpotens=1; while (varv <= 10) { tvåpotens=tvåpotens*2; System.out.println(tvåpotens); varv=varv+1; } //while } //main } //Potens for-slingan • Vet man hur många varv slingan ska gå runt kan man använda for istället: • for (int i=0; i<2; i++) { System.out.println(”Varv ” + i); } • Variabeln i ovan existerar bara inuti forslingan Slingexempel - for // Beräknar tio tvåpotenser (s105 i boken) class Potens { public static void main(String[] args) { int tvåpotens=1; for (int varv=1; varv <= 10; varv++) { tvåpotens=tvåpotens*2; System.out.println(tvåpotens); } //for } //main } //Potens