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
knking@gsu.edu
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