Algoritmiek Strings & Stringmanipulaties; Controle Structuren; Floating-point notation. Hoorcollege 4 - Ma. 25 sept. 2006 L.M. Bosveld-de Smet Te behandelen onderwerpen Strings Elementaire Controle Structuren String data en operatoren Strings in Java Logische operatoren Boolse expressies If-statements Floating-point Notatie Wat is een String? Wat is een String in programmeercontext? String literals String data type “John” (‘John’) “Hi there!” “This is John’s apple.” Lijst tekens van variabele lengte String operatoren Combineren of manipuleren Strings Concatenatie, replicatie Strings in Java String klasse aanwezig in de Java API behoort tot package java.lang java.lang wordt automatisch geïmporteerd String objecten String literals (bijv. “Java rules!”) String variables String str1 = “Java Rules!”, str2; Let op: geen gebruik van new en constructor Visualisatie String objecten J a v a 0 1 2 3 4 R u l e s ! 5 6 7 8 9 10 Constructie van String objecten String str1 = “Java Rules!” ; String object str1 |J|a|v|a| |R|u|l|e|s|!| String methoden Hoe lang is de string? Welk teken staat op positie 0? int l = str1.length(); char ch = str1.charAt(0); Waar in de string start de substring “Rules”? int i = str1.indexOf (“Rules”); String concatenatie Plak str2 achter str1 Verbinding van getallen met strings String strNew = str1 + str2; String str = “Value: ” + i; System.out.println(str + j + k); System.out.println(j + k + str); string object + niet-string object: String str = “Teller waarde: ” + ctr.toString(); String str = “Teller waarde: ” + ctr; Werken met Strings: Voorbeeld 1 Probleem: dissectie van email adressen in naam, domein1 en domein 2 [email protected] Naam: knking Domein1: edu Domein2: gsu Voorbeeld 1 oplossing int atIndex = emailAddress.indexOf(“@”); int dotIndex = emailAddress.indexOf(“.”); String name = emailAddress.substring (0, atIndex); String domain2 = emailAddress.substring (atIndex + 1, dotIndex); String domain1 = emailAddress.substring (dotIndex + 1); Werken met Strings: Voorbeeld 2 public class Star{ public static void main(String[] args){ String name = “Francis Albert Sinatra”; int index1 = name.indexOf(“ ”); int index2 = name.LastIndexOf(“ ”); String str1 = name.substring(0,index1); String str2 = name.substring(index1+1, index1+2); String str3 = name.substring(index2+1); System.out.println(str3 + ”, “ + str1 + “ “ + str2 + “.”); } } Voorwaardelijke instructies if <test> then <instructie 1> else <instructie 2> Voorwaarden/Testen in programma’s: uitkomst: true / false (boolean type) boolse expressies vergelijkingsoperatoren kleiner dan: < kleiner dan of gelijk aan: <= gelijk aan: == groter dan: > groter dan of gelijk aan: >= niet gelijk aan: != Voorbeeld in Java if (acct.getBalance() <= 0.0 ) { System.out.println(“Sorry, no money left.”); } else { System.out.println(“OK, still money left.”); } George Boole G. Boole, Lincoln. UK, 1815 - 1864 boolse operatoren OR vegetariërs studenten boolse operatoren AND vegetariërs studenten boolse operatoren NOT vegetariërs studenten boolse operatoren NOT vegetariërs studenten Boole bestelt lunch Boolse operatoren in Java OR: || (isVegetariër(x) || isStudent(x)) AND: && (isVegetariër(x) && isStudent(x)) NOT: ! !(isVegetariër(x)) !(isStudent(x)) ± short circuit evaluation Controle structuren Controle structuren in programmeren Basic control structures: if statements while statements for statements Simple if-statement …… if (banksaldo < 0.0) { System.out.println (“U staat rood.”); } …… boolse expressie true inner statement false Block of inner statements …… boolean rekeningIsGeblokkeerd = false; if (banksaldo < 0.0) { System.out.println (“U staat rood.”); rekeningIsGeblokkeerd = true; } …… Complex boolean expression …… boolean rekeningIsGeblokkeerd = false; if (banksaldo < 0.0) && (banksaldo > -500.00) { System.out.println (“U staat een beetje rood.”); } …… Testen op (on)gelijkheid …… if (banksaldo == 1000.00 * 1000.00) { System.out.println(“Bedenk wel, ”); System.out.println(“geld maakt niet gelukkig.”); } …… Strings vergelijken …… String inputUser = SimpleIO.readLine(); String password = “Algoritmiek”; if (!inputUser.equals(password)) { System.out.println (“Toegang geweigerd.”); } …… String naam1 = SimpleIO.readLine(); String naam2 = SimpleIO.readLine(); if (naam1.compareTo (naam2) > 0) { System.out.println (naam2); System.out.println (naam1); } …… Boolean type Directe waardetoekenning passwordIsAccepted = inputUser.equals(password); If-statement with else-clause …… boolean deurOpen = true; if (!(draagtOverhemd && draagtDas)) { System.out.println (“Sorry. Geen toegang.”); deurOpen = false; } else { System.out.println (“Welkom. Treedt binnen”); …… De Morgan’s Laws !(draagtOverhemd && draagtDas) !draagtOverhemd || !draagtDas !(draagtOverhemd || draagtDas) !draagtOverhemd && !draagtDas draagtTShirt || draagtTrui If with else if (<expr>) { <block 1> } else { <block2> expr. } block 1 block 2 Cascaded if-statement expr1 expr2 expr3 expr4 Cascaded if-statement …… if (banksaldo < 0.0) { System.out.println (“Beleggen kunt u wel vergeten.”); } else { if (banksaldo >= 0.0 && banksaldo <= 5000.00) { System.out.println (“Raadpleeg onze website voor uw beleggingen.”); } else { if (banksaldo > 5000.00) { System.out.println (“Raadpleeg uw personal banker.”); } …… Complex boolean expressions - De Morgan’s Law Cascading structure …… if (banksaldo < 0.0) System.out.println (“Beleggen kunt u wel vergeten.”); else if (banksaldo >= 0.0 && banksaldo <= 5000.00) System.out.println (“Raadpleeg onze website voor uw beleggingen.”); else if (banksaldo > 5000.00) System.out.println (“Raadpleeg uw personal banker.”); …… Complex boolean expressions …… if (banksaldo < 0.0) System.out.println (“Beleggen kunt u wel vergeten.”); else if (banksaldo <= 5000.00) System.out.println (“Raadpleeg onze website voor uw beleggingen.”); else System.out.println (“Raadpleeg uw personal banker.”); …… Floating numbers Floating point numbers float: 4 bytes double: 8 bytes long double: 16 bytes Twee aspecten: range precision Compacte weergave Nationale schuld: $ 4000000000000 4.0E12 4.0e12 Floating point notation SIGN MANTISSA EXPONENT + .142687 +3 142,687 0,14268710 * 103 - .34128 -2 -0,0034128 0,3412810 * 10-2 decimaal - .101011 +11 -101,011 0,1010112 * 23 + .10111 -10 0,0010111 0,101112 * 2-2 binair