6108 Programmering i Java Leksjon 2 Setninger og uttrykk Del 2 Roy M. Istad 2015 Uttrykk, operatorer og verdier int tall = 3; int x = 1 + tall; // x er 4 Uttrykk: Variabler, verdier, konstanter og metodekall sammensatt med operatorer. Verdier: Anonyme konstanter og metodekall. Anonym konstant: Konkret verdi i koden, her heltallene 1 og 3. Operatorer: Spesielle symbol utfører operasjoner (oppgaver) på/mellom verdier og uttrykk. Eks. + * / 6108 Programmering i Java Leksjon 2 Del2 side 2 1
Eksempel: Uttrykk, operatorer og verdier 1) 12 + 6 / 3 1 = 12 + 2 1 = 13 2) (12 + 6) / 3 1 = 18 / 3 1 = 5 3) (12 + 6) / (3 1) = 18 / 2 = 9 Vi bruker parenteser for å styre/overstyre beregningsrekkefølgen. NB! Operatorene har ulik prioritet, de utføres i en bestemt rekkefølge. F.eks. * og / utføres foran + og 6108 Programmering i Java Leksjon 2 Del2 side 3 Datatype Navn Plass (bit) Min.verdi Maks.verdi Enkelttegn char 16-2 1470483 648 2 147 65535 483 647 Heltall int 32 2 31 2 31 1 Desimaltall double 64 4.9 10 324 1.8 10 +308 Logiske verdier boolean 1 false true = = 6108 Programmering i Java Leksjon 2 Del2 side 4 2
Datatype Navn Plass (bit) Min.verdi Maks.verdi Enkelttegn char 16 0 65535 Heltall byte 8 128 127 Heltall short 16 32768 32767 Heltall int 32 2 31 2 31 1 Heltall long 64 2 63 2 63 1 Desimaltall float 32 1.4 10 45 3.4 10 +38 Desimaltall double 64 4.9 10 324 1.8 10 +308 Logiske verdier boolean 1 false true 6108 Programmering i Java Leksjon 2 Del2 side 5 Heltallstype - MIN_VALUE....... -4-3 -2-1 0 1 2 3 4....... MAX_VALUE -128 byte 127-2 147 483 648 int Integer.MIN_VALUE 2 147 483 647 Integer.MAX_VALUE Hva blir 1 500 000 000 + 1 500 000 000 i datatypen int? 6108 Programmering i Java Leksjon 2 Del2 side 6 3
Heltallstype int: Adderer tall til stadig større verdi... integer overflow Eks. 1 000 000 000 < 2 147 483 647 + 1 000 000 000 = MAX_VALUE + 1 000 000 000 = 1 294 967 296? 2000000000 + 2000000000 + 1000000000 = 705032704? 6108 Programmering i Java Leksjon 2 Del2 side 7 Heltallstype 0 +1 MIN_VALUE MAX_VALUE 6108 Programmering i Java Leksjon 2 Del2 side 8 4
Automatisk typeskifte: int x = 5; double y = x; // 5 er et heltall! out.println("y = " + y); // gir...? // Hva skjer omvendt? y = 5.0 double z = 5; int w = z; // 5.0 er et desimaltall out.println("w = " + w); // gir...? Typetvang: Typeblanding og typetvang incompatible types: possible lossy conversion Datatype til beregningsresultat overstyres aktivt double desimal = 2.8; int hel = (int)desimal; (datatype)uttrykk Verdioverføring typetvang automatisk Liten datatype Stor datatype 6108 Programmering i Java Leksjon 2 Del2 side 9 Typeblanding: Datatypen til beregningsresultatet settes automatisk. Hvordan skal vi få 2,5 eple pr barn som resultat? Hvilken datatype må/bør variablene ha? double double int lengde = 3.5 + 6; brøk = 12.9 / 3; epleprbarn = 10 / 4; NB! Datatypen blir double når: epleprbarn = 10/4.0; epleprbarn = 10.0/4; epleprbarn = (double)10/4; 6108 Programmering i Java Leksjon 2 Del2 side 10 5
Enkelttegn, char og Unicode Datatypen char brukes for å ta vare på ett enkelt tegn, f.eks. 'a' Alle tegn har en tallkode i Unicode (side 405 406) Tegnet stor A har koden 65, stor B har 66 osv. Obs! De norske bokstavene ligger spredt utover (Å 197, Ø 216) Eksempel på automatisk typeskifte: char tegn = 'A'; int kodenr = tegn; Eksempel på typetvang (eksplisitt typeskifte): int kodenr = 97; char tegn = (char)kodenr; // kodenr er nå 65 // tegn er nå 'a' 6108 Programmering i Java Leksjon 2 Del2 side 11 side 405 406 6108 Programmering i Java Leksjon 2 Del2 side 12 6
Uttrykk og operatorer Regneoperasjoner: int pris = 100 + 24; // pris er 124 int beløp = 2 * 100; // beløp er 200 int veksel = beløp - pris; // veksel er 76 int ant10kr = veksel / 10; // ant10kr er 7 int ant1kr = veksel % 10; // ant1kr er 6 OBS! Bruker både / og % i samme divisjon, men med ulike svar altså... 76 : 10 = 7-70 6 6108 Programmering i Java Leksjon 2 Del2 side 13 Restoperator % kalles også moduloperator Eksempel: 11 / 2 = 5 med 1 i rest fordi 11 : 2 = 5 10 1 rest 11 % 2 11 / 2 Uttrykk og operatorer Eksempel (10 99) Plukk ut første og andre siffer i et tosifret heltall tall = 47 = 4*10 + 7 siffer1 siffer2 : : // tall deklarert og innlest int siffer1 = tall / 10; int siffer2 = tall % 10; out.println(tall + "har sifrene:" + "\n" + "Første siffer = " + siffer1 + "\n" + "Andre siffer = " + siffer2); : : // Alternativ til restoperator int siffer2 = tall siffer1*10; 6108 Programmering i Java Leksjon 2 Del2 side 14 7
Oppdateringsoperatorer Steglengde 1 (ett hakk): i++; // Er definert som i = i+1; i--; // Er definert som i = i-1; Andre steglengder: x += 4; // Er definert som x = x+4; x -= 3; // Er definert som x = x-3; x *= 5; // Er definert som x = x*5; x /= 2; // Er definert som x = x/2; 6108 Programmering i Java Leksjon 2 Del2 side 15 Matematisk verktøy (sidene 61 63) NB! import static java.lang.math.*; Absoluttverdi: abs double x = abs(-3.4); Det største av to tall: max int størst = max(23,56); Det minste av to tall: min int minst = min(23,56); double minst2 = min(9.5,7.5); Avrund desimaltall: round double hel = round(24.55); Kvadratrot: sqrt double y = sqrt(25); 25 Potens: pow int v = (int)pow(2,3); 2 3 // x er lik 3.4 // størst er lik 56 // minst er lik 23 // minst2 er lik 7.5 // hel er lik 25.0 // y er lik 5.0 // v er lik 8 = 2*2*2 6108 Programmering i Java Leksjon 2 Del2 side 16 8
Sammensatte metodekall Fig. 2.17, side 62 Fig. 2.18, side 64 h kv lv Hvor lang er diagonalen d? double d = sqrt( pow(kv,2) + pow(lv,2) ); d Eks. Uttrykket skal evalueres med verdiene: kv = 3.0 og lv = 4.0 (kv) + (lv) d = 5.0 6108 Programmering i Java Leksjon 2 Del2 side 17 6108 Programmering i Java Slutt på leksjon 2 Del 2 9