Hoofdstuk 3: Werken met numerieke gegevens Inleiding Informatica Prof. Dr. O. De Troyer Gehele getallen • Geen voorgedefinieerde klasse maar ingebouwd data type int – Gehele getallen – Voorziet in een basis van rekenkundige operaties +, -, * , /, , % (rest bij gehele deling) Vb: 5 + 12 -9 * 4 * 3 – Afdrukken door print en println System.out.println( 14) ; System.out.println( 89 * 67) ; Inleiding Informatica Prof. Dr. O. De Troyer 2 Data typen • Zijn geen klassen • Hebben geen methoden of instantie variabelen • Er is geen constructor nodig Inleiding Informatica Prof. Dr. O. De Troyer 3 Primitieve data typen • Zijn ingebouwd in de programmeertaal Inleiding Informatica Prof. Dr. O. De Troyer 4 Data typen & Variabelen • Kunnen direct aan een variabele toegekend worden int i ; i = 3; Inleiding Informatica i 3 Prof. Dr. O. De Troyer 5 Data typen • Referentie variabele versus data type variabele x lijn 5 “youhouu” een object • data type variabele dienen vóór het gebruik een waarde te krijgen int x ; x ? x = 5; x 5 Inleiding Informatica Prof. Dr. O. De Troyer 6 Data typen • Kunnen geen ontvanger zijn (zijn geen objecten) • Kunnen wel gebruikt worden als argument van een methode mijnAuto.rijden(90) • Kunnen wel gebruikt worden als “return” waarde van een methode Inleiding Informatica Prof. Dr. O. De Troyer 7 Literals 2 * ( x + y) - ( z / 73) literals • hun naam is een representatie van hun waarde Inleiding Informatica Prof. Dr. O. De Troyer 8 Constanten • Variabelen waarvan de waarde niet wijzigt • Aangeduid door sleutelwoord final final int gridGrootte = 10 ; • Constanten te verkiezen boven literals plaats = 10 * afstand ; Beter: final int gridGrootte = 10 ; plaats = gridGrootte * afstand ; Inleiding Informatica Prof. Dr. O. De Troyer 9 Voorrangsregels en haken 5+3*2 8 * 2 of 5 + 6 ? Eerst * en / dan + en • Haakjes gebruiken maakt alles duidelijker en voorkomt fouten (5 + 3) * 2 5 + (3 * 2) Inleiding Informatica Prof. Dr. O. De Troyer 10 Afkortingen salaris = salaris * 1.20 ; Verkorte notatie salaris *= 1.20 ; // 20% opslag x=x+5; Verkorte notatie x += 5 ; Idem -= /= • Voorkomt fouten: i = j + 1; Inleiding Informatica i.p.v. Prof. Dr. O. De Troyer %= i = i + 1; 11 Afkortingen (2) • Meervoudige toekenning x=y=z=0; Verkorte notatie voor x= 0; y= 0; z= 0; Inleiding Informatica Prof. Dr. O. De Troyer 12 Afkortingen (3) of x=x+1; Of x ++ ; Idem x -- ; Fout: 6 ++ ; x += 1 ; 6 is een literal; kan men niet wijzigen (x + y)++; x + y is een uitdrukking, geen veranderlijke; kan men niet wijzigen Inleiding Informatica Prof. Dr. O. De Troyer 13 Afkortingen (4) Opgelet in expressies! ++ variabele telt 1 op bij de waarde en geeft resultaat terug variabele ++ geeft waarde terug en telt er dan 1 bij op -- variabele trekt 1af van de waarde en geeft resultaat terug variabele -- geeft waarde terug en trekt er dan 1 van af Voorbeeld telkens kost == 100 ++kost kost ++ --kost kost -Inleiding Informatica Prof. Dr. O. De Troyer -> 101 -> 100 -> 99 -> 100 waarde kost = 101 waarde kost = 101 waarde kost = 99 waarde kost = 99 14 Opgelet string1 + string2 Is een afkorting voor string1.concat(string2) Inleiding Informatica Prof. Dr. O. De Troyer 15 Andere data typen voor gehele getallen • int voor gehele getallen tussen -2 147 483 647 en 2 147 483 647 (231) – Gebruikt 32 bits • long voor gehele getallen tussen -263 en 263 (meer dan 1018) – Gebruikt 64 bits • short voor gehele getallen tussen -32 767 en 32 767 – Gebruikt 16 bits • byte voor gehele getallen tussen -127 en 127 – Gebruikt 8 bits Inleiding Informatica Prof. Dr. O. De Troyer 16 Data typen voor gehele getallen • Meer bits nodig meer computer geheugen nodig • Mengen van typen byte short int long long l1, l2; int i1 = 55 , i2 ; short s ; byte b =10; Inleiding Informatica Prof. Dr. O. De Troyer l1 = 98 ; l2 = i1 ; l1 = 2 * i1 ; i2 = l2 ; s=b; s = i2 ; l2 = s ; b = i2 ; b = l1 ; 17 Converteren van typen • Voorbeeld: long x ; int i ; x = 10 ; i = x ; ----> niet toegelaten! Maar waarde van x is klein genoeg voor int! Oplossing i = (int) x ; Dwingt een omzetting (van de waarde van x) naar int af. x blijft van het type long! Inleiding Informatica Prof. Dr. O. De Troyer 18 Reële getallen • float voor reële getallen met 7 cijfers van precisie – Getallen tussen 1.4012985 x 10-45 en 3.4028235 x 1038 • double voor reële getallen met 15 cijfers van precisie – Getallen tussen 2.22507385072014 x 10-308 en 1.79769313486231570 x 10308 • Niet alle getallen; enkel deze met resp. 7 , 15 cijfers of precisie – Bv. niet 1 234 567 089 maar 1 234 567 000 Inleiding Informatica Prof. Dr. O. De Troyer 19 Reële getallen - notatie • Wetenschappelijke notatie – 3.4028235 x 1038 wordt 3.4028235E38 • Om onderscheid te maken tussen float en double en andere int literals – float: 3.4028235E38f 3.14115f 38f – double: 3.4028235E38d 3.14115d 38d Inleiding Informatica Prof. Dr. O. De Troyer 20 Voorbeeld double oppervlakte, straal, pi = 3.14159d; straal = 12.0 ; oppervlakte = pi * straal * straal ; int j = 1222333444; float x = 1222333444.0f; System.out.println(“j =“ + j); System.out.println(“x =“ + x); j += 1; x += 1.0 ; System.out.println(“j =“ + j); System.out.println(“x =“ + x); j = 1222333444; x = 1.222333444E9; j = 1222333445; x = 1.222333444E9; Enkel 7 cijfers precisie! Inleiding Informatica Prof. Dr. O. De Troyer 21 Mixen van float en double float double int float/double long float/double betekenen maar kan verlies aan precisie Hier ook conversie mogelijk: (int) (float) ... Inleiding Informatica Prof. Dr. O. De Troyer 22 De klasse Math • Math is klasse met wiskundige functies als (klasse) methoden Voorbeeld: static int abs( int a) { …} // geeft de absolute waarde van a terug int i = -2 ; int j = Math.abs(i) ; Inleiding Informatica Prof. Dr. O. De Troyer 23 De klasse Math (2) • • • • • • • • • • • • • • • final double E waarde van e final double PI waarde van pi double cos(double x) cosinus van hoek x in radialen double sin(double x) sinus van hoek x in radialen double tan(double x) tanginus van hoek x in radialen … abs(… x) absolute waarde van x … min(… x, … y) het kleinste van x en y … max(… x, … y) het grootste van x en y ... round(... x) x float wordt afgerond naar integer; double naar long double log(double x) natuurlijk logaritme van x double random() random getal tussen 0.0 en 1.0 double sqrt(double x) positieve vierkantswortel van x double pow(double x, y) xy double exp(double x) ex e.a. Inleiding Informatica Prof. Dr. O. De Troyer 24 “Enveloppe” klassen • Met elk primitief data type correspondeert een klasse – Klasse Integer correspondeert met int – Klasse Byte, Short, Long, Float, Double correspondeert met byte, short, long, float, double • Laten toe om een data type element om te zetten naar een object en omgekeerd int i = 10 ; Integer object = new Integer(i); i = object.intValue() ; Inleiding Informatica Prof. Dr. O. De Troyer 25 “Enveloppe” klassen (2) • Laten conversie van getal naar string toe – Klasse methode: toString int i = 10 ; String s = Integer.toString(i) ; float f = 12.34f ; String s = Float.toString(f) ; //s wordt “10” //s wordt “12.34” • Twee nuttige constanten Long.MIN_VALUE Long.MAX_VALUE Idem voor de andere numerieke klasse Inleiding Informatica Prof. Dr. O. De Troyer 26