Fler byggstenar Heltalsrepresentation Fyra heltalstyper Intern data representation Typomvandlingar Fler operatorer VŠljande & upprepande satser Tecken-bit by te t short t int t 7 bitar 15 bitar 31 bitar long t 63 bitar 1 2 Heltalet 25 med 8 bitar (1 byte) 00011001-25, invertera alla bitar 11100110 addera ett 11100111 TvŒ-komplement Overflow och Underflow Fasta minnesutrymmen kan ge problem med overflow/underflow Overflow nšr talet blir fšr stort fšr det allokerade utrymmet Underflow nšr všrdet blir fšr litet fšr att kunna skiljas frœn noll Teckenbiten bytte tecken och indikerar ett negativt tal 3 4 FlyttalsvŠrden FlyttalsvŠrden Ett decimalt flyttal kan definieras tecken * mantissa * 10 exponent -843.977 kan skrivas -1 * 843977 * 10-3 dšr Ð tecken Šr 1 eller -1 Ð mantissa positivt všrde som anger de všrdebšrande siffrorna Ð ex pon ent anger hur decimalpunk ten ska skiftas i fšrhœll ande till mantissan BinŠrt tecken * mantissa * 2 exponent 5 6 1
Tecken Tecken Representeras i Java med Unicode Character Set Varje tecken har ett unikt siffervšrde Tecknet 'z' har Unicode všrde 122, som med 16 bitar blir 0000000001111010 DŠrfšr kan man ÓrŠknaÓ med tecken T.ex. 'A' is stored har Unicode všrde 65, vilket medfšr att ch = 'A' + 5; Ger tecknet 'F' in ch (Unicode všrde 70) Kan vara anvšndbart 7 8 Typkonvertering Utškande konverteringar Oftast problemfritt Varje všrde associeras med en specifik datatyp Ibland behšvs konvertering Allt kan inte konverteras, booleska všrden t.ex. Akta sœ att information inte gœr fšrlorad Ð frœn mindre till stšrre všrdemšngd FrŒn Till by te short int long float short, int, long, float eller double int, long, float eller double int, long, float eller double long, float eller double float eller double double 9 10 InskrŠnkande konverteringar Typkonvertering Mer riskfyllt Ð gœr frœn mindre datamšngd till stšrre FrŒn Till by te short int long float double byte eller byte eller short byte, short eller byte, short, eller int byte, short,, int eller long byte, short,, int, long eller float 3 sštt att gšra typkonvertering Tilldelning - všrdet och variabeln har olika typ aritmetisk - operatorer som automatiskt konverterar typen hos operanderna Casting - en operator som tvingar ett všrde till en annan typ 11 12 2
Tilldelning Aritmetisk typkonvertering float pengar; int kronor = 82; pengar = kronor; konverterar všrdet 82 till 82.0 Det všrde som kronor har Šndras inte Mšjligt bara med utškande konverteringar Detta gšller Šven parameteršverfšring Vissa operatorer kršver konsistenta typer fšr operanderna float summa,resultat; int antal ; resultat = summa / antal; VŠrdet i antal konverteras internt till float divisionen utfšrs och ger ett flyttalsresultat VŠrdet hos antal Šndras inte 13 14 Cast-operatorn Primitiva typerna har wrapper class. Wrappers Operator som specificeras av ett typ-namn inom parentes Placeras framfšr všrdet som ska konverteras Heltalsdelen av pengar lagras i kronor kronor = (int) pengar; VŠrdet hos pengar Šndras inte r en konvertering mšjlig, kan den gšras med en cast Primitiv Typ int double boolean Wrapper Class Integer Double Character Boolean Objekt istf. primitiv typ Ger metoder (appendix O) int heltal = Integer.parseInt(Ó123Ó); 15 16 Fler operatorer Operatorer fšr att ška och minska Andra operatorer i Java : Ð operatorer som škar/minskar ett všrde Ð logiska operatorer (har vi redan tittat pœ) Ð tilldelnings operatorer Operatorn (++) adderar ett till heltal eller flyttal antal++; I princip ekvivalent med antal = antal + 1; Motsvarande finns fšr att minska med ett 17 18 3
ka och minska Operatorerna kan appliceras prefix (fšre variabeln) eller postfix (efter variabeln) Som egen sats Šr : antal++; ekvivalent med ++antal; import java.util.*; class Tips public static void main(string[] args) Random tips1x2 = new Random; tecken; int slumptal; slumptal = Math.abs(tips1X2.nextInt()) % 3; if (slumptal = 1) tecken = Õ1Õ; else if (slumptal = 2) tecken = Õ2Õ; else tecken = ÕXÕ; É //main //Tips Exempel 19 20 Syntax : switch (expression) case value1: statement-list1 case value2: statement-list2 case É switch import java.util.*; class Tips public static void main(string[] args) É Random tips1x2 = new Random; tecken; switch (Math.abs(tips1X2.nextInt() % 3 )) case 1: tecken = Õ1Õ; break; case 2: tecken = Õ2Õ break; default : tecken = ÕXÕ; //main //Tips Exemplet pœ annat sštt.. 21 22 switch -satsen Upprepningar Uttrycket mœste kunna evalueras till heltal eller tecken break ett ÓšvrigaÓ-fall kan lšggas sist med default TvŒ konstruktioner till: do-satsen for-satsen Sitautionen avgšr vilken man všljer 23 24 4
do -satsen Syntax : sats do sats while (villkor); true villkor false Satsen utfšrs tills villkoret blir falskt Villkoret testas efter det att satserna utfšrts import java.io.*; import java.util.random; do - satsen class Dice // Uses a do loop to roll two dice multiple times. public static void main (String[] args) throws IOException Random roll = new Random(); int die1, die2; String again; do Out.println ("Rolling the dice..."); die1 = Math.abs (roll.nextint()) % 6 + 1; die2 = Math.abs (roll.nextint()) % 6 + 1; System.out.println ("You rolled a " + (die1 + die2)); Out.print("Roll again (y or n)? "); again = In.readLine(); while (again.equals("y")); // method main // class Dice 25 26 Kšrning import java.util.random; public class Dice2 private final static int MAX_ROLLS = 1000; for - satsen public static void main (String[] args) Random roll = new Random(); int die1, die2, snake_eyes = 0; for (int count=1; count <= MAX_ROLLS; count++) die1 = Math.abs (roll.nextint()) % 6 + 1; die2 = Math.abs (roll.nextint()) % 6 + 1; if (die1 + die2 == 2) snake_eyes++; // for-loop Out.print ("Out of " + MAX_ROLLS + " rolls, "); Out.println ("you rolled snake eyes " + snake_eyes + " times."); // main // class Dice2 27 28 Kšrningar Syntax : for -satsen motsvarar for (initialisering; villkor; fšršndring) sats; initialisering; while (villkor) sats; fšršndring; 29 30 5
for -satsen for -satsen initialisering Som fšr while sœ testas villkoret innan satsen utfšrs for-loopen utfšrs noll eller flera gœnger Fast loop Loop-variabeln bšr inte Šndras i satserna villkor true sats fšršndring false 31 32 for (int antal=1; antal < 75; antal++) System.out.println (antal); for -satsen for (int num=5; num <= total; num = num*2) sum = sum + num; System.out.println (sum); 33 6