Hoofdstuk 6: Wiskundige Functies, Chars en Strings
Inleiding
In vorige hoofdstukken hebben we ons toegespitst op kleine programma's en konden we met eenvoudige selectie structuren (if, if-else, switch) eenvoudige programma's maken. In dit hoofdstuk gaan we iets dieper in op wiskundige functies, characters en tekst (of String). Het zijn elementen die we in programma's vrij veel gebruiken. Voornamelijk strings of stukjes tekst worden heel veel gebruikt en hoe we tekst kunnen manipuleren.
Veelgebruikte wiskundige functies
Java voorziet veel nuttige methodes in de
Mathklasse om veelgebruikte wiskundige functie te berekenen
- Een methode is een verzameling van Java uitdrukkingen die een specifieke taak uitvoeren. De functies resulteren een in waarde van het type
intofdouble(meestaldouble) die je dan kan gebruiken in het verdere verloop van het programma. - Naast methoden heeft de
Mathklasse ook constanten. De meest gebruikte zijnMath.PIenMath.E, die en voorstellen.
Goniometrische functies
- Hieronder vind je een tabel met methoden die goniometrische functies uitvoeren
| Methode | Beschrijving |
|---|---|
sin(radialen) |
berekent de sinus van een hoek in radialen |
cos(radialen) |
berekent de cosinus van een hoek in radialen |
tan(radialen) |
berekent de tangens van een hoek in radialen |
toRadians(graden) |
berekent de hoek in radialen van een hoek in graden |
toDegrees(radialen) |
berekent de hoek in radialen van een hoek in graden |
asin(a) |
berekent de hoek in radialen voor de inverse sinus |
acos(a) |
berekent de hoek in radialen voor de inverse cosinus |
atan(a) |
berekent de hoek in radialen voor de inverse tangens |
- De parameter voor
sin,cosentanis een hoek in radialen. Voorbeelden:
Exponentiële functies
- Er zijn 5 functies met exponenten
| Methode | Beschrijving |
|---|---|
exp(x) |
berekent |
log(x) |
berekent de natuurlijke logaritme van x () |
log10(x) |
berekent de basis 10 logaritme van x () |
pow(a,b) |
berekent a tot de macht b () |
sqrt(a) |
berekent de vierkantswortel van x () |
- Voorbeeld
TODO nog functies
Charactertypes en operaties
Een charactertype stelt juist één teken voor.
- Naast types om getallen voor te stellen, heeft Java ook types om tekens voor te stellen. Het datatype
chardient om tekens voor te stellen. Een character literal is ingesloten in enkelvoudige aanhalingstekens, bv:
- Het eerste statement kent het teken
atoe aanletter. Het tweede statement kent het teken4toe aancijfer. Let op, voor de computer is dit slechts een teken, hij heeft geen notie dat wij daar misschien de waarde 4 mee associëren.
Unicode en ASCII Code
- een computer gebruikt binaire getallen om gegevens voor te stellen. Dat betekent ook dat het teken in een binaire voorstelling dient omgezet te worden.
- Vroeger was er de ASCII (American Standard Code for Information Interchange) die een teken voorstelde via 8 bits. Maar door de komst van ander tekens (bv. Chinees, Japans,...) was 8-bit niet meer genoeg.
- De Unicode voorstelling laat toe om 65,536 tekens voor te stellen in een 16-bit binaire voorstelling. Dit is op zich niet genoeg en meen heeft een uitbreiding gedaan zodat Unicode 1,112,064 tekens kan voorstellen. Maar wij gaan ons beperken tot de oorspronkelijke 16-bit voorstelling.
- Elke teken heeft een decimale waarde die in de binaire voorstelling overeenkomt met de ASCII code. Zo is het teken
0gelijk aan de ASCII code00110000wat in het decimaal getalstelsel overeekomt met 48. - In de Unicode standaard worden er 4 hexadecimale cijfers gebruikt. Elk hexadecimaal cijfer kan voorgesteld worden door 4 bits. De ASCII code is een onderdeel van de Unicode standaard. Een teken in Unicode wordt voorgesteld door
\u0000tot\uFFFF. De ASCII tekens zitten in de Unicode vervat van\u0000tot\u007F(e.g. de laatste 7 bits van de 16-bit Unicode teken). - In het Chinees is een begroeting gelijk aan 欢迎 en dat zijn de Unicode tekens
\u6B22 \u8FCE.
| Characters | Code waarde in decimaal |
|---|---|
0 tot 9 |
48 tot 57 |
A tot Z |
65 tot 90 |
a tot z |
97 tot 122 |
Escape sequenties voor speciale characters
- Stel dat je in je programma een volgend stuk tekst op het scherm wil tonen:
Hij zei "Java is leuk". Logischerwijze zou een Java uitdrukking die dit doet als volgt zijn:
- Deze Java-uitdrukking zal een compileerfout opleveren omdat stukken tekst worden afgebakend met dubbele aanhalingstekens (
"). In voorgaande Java-uitdrukking kan de compiler niet weten welke aanhalingsteken het stuk tekst afbakent of welk aanhalingsteken op het scherm moet getoond worden. - Om dit probleem op te lossen heeft java een speciale notatie om speciale tekens te tonen. Deze speciale notatie wordt ook wel escape sequenties genoemd en bestaat uit een backslash gevolgd door een teken of een combinatie van cijfers. Om een aanhalingsteken op het scherm te tonen moeten we
\"gebruiken.
- Er zijn tekens die niet direct zichtbaar zijn. Zoals een nieuwe regel (
\n) of tab (\t). De escape sequentie\u0009is het tab-teken in unicode en is dus equivalent met\t.
| Escape sequentie | Naam | Unicode code | Decimale waarde |
|---|---|---|---|
\b |
Backspace | \u0008 |
8 |
\t |
Tab | \u0009 |
9 |
\n |
Nieuwe regel | \u000A |
10 |
\f |
Formfeed (wordt niet meer gebruikt) | \u000C |
12 |
\r |
Return | \u000D |
13 |
\\ |
Backslach | \u005C |
92 |
\" |
Aanhalingsteken | \u0022 |
34 |
- De backslash
\wordt ook wel de escape character genoemd en is een speciaal character. Om een\te tonen moet je de escape sequentie\\gebruiken. Bijvoorbeeld:
toont
\t is een tab character
Casten tussen char en numerieke types
- Een
charkan gecast worden naar een numeriek type. Een getal kan ook gecast worden naar eenchar. Zo kunnen we een kommagetal omzetten naar een teken
- Wanneer een
charwordt omgezet naar een numeriek type dan wordt de Unicode code omgezet naar een getal.
- Er kan impliciet gecast worden (zonder
(type)) vancharnaarbyteenint:
- All numerieke operatoren kunnen uitgevoerd worden op
char. Eencharwordt dan automatisch omgezet in een getal.
toont
i is 101
j is 99
99 is de Unicode voor character c
Hoofdstuk 2
Vergelijken van chars
- Variabelen van het type
charkunnen met elkaar vergeleken worden via de logische operatoren. Zo is'a' < 'b'wantaheeft unicode 97 en b heeft unicode 98. - Soms moet er in een programma getest worden indien een letter een hoofdletter is of kleine letter. Dit kan als volgt:
- Voor het gemak biedt Java de volgende methodes aan in de
Characterklasse om tekens (characters) te testen. TheCharacterklasse is gedefinieerd in dejava.langpackage.
| Methode | Beschrijving |
|---|---|
isDigit(ch) |
geeft true als ch een cijfer is |
isLetter(ch) |
geeft true als ch een letter is |
isLetterOrDigit(ch) |
geeft true als ch een cijfer of een letter is |
isLowerCase(ch) |
geeft true als ch een kleine letter is |
isUpperCase(ch) |
geeft true als ch een hoofdletter is |
Bijvoorbeeld
De klasse String
Een string is een sequentie van characters.
- Een
charstelt maar één teken vvoor. Om een stuk tekst voor stellen hebben we een reeks tekens nodig. Hierbij kunnen we het typeStringgebruiken. Bijvoorbeeld, volgend stukje code declareert een variabele van het typeStringmet de naamboodschapen de waarde van die variabele is"Welkom bij Java".
Stringis een vooraf gedefinieerde klasse in de Java bibliotheek, zoalsSystemenScanner. Het is geen primitief type, maar een zogenaamde referentie type. Een variabele van een referentie type is een variabele dat refereert (verwijst) naar een object. Een object is een verzameling van inhoud die in het type gedeclareert is. We praten meer over objecten en klassen vanaf hoofdstuk XX. Voorlopig volstaat de uitleg die hier gegeven wordt om elementaire bewerkingen uit te voeren met stukjes tekst.- De
Stringklasse heeft nekle methodes om eigenschappen en elementen uit strings te verkrijgen:
| Methode | Beschrijving |
|---|---|
length() |
Geeft het aantal tekens (characters) in de string |
charAt(index) |
Geeft het teken terug in rij op index |
concat(s1) |
Geeft een nieuwe string terug die de concatenatie is van de string met de string s1 |
toUpperCase() |
Geeft een nieuwe string terug waarbij alle letters verandert zijn in hoofdletters |
toLowerCase() |
Geeft een nieuwe string terug waarbij alle letters verandert zijn in kleine letters |
trim() |
Geeft een nieuwe string terug waarbij alle witruimte (spaties, tabs, enters) op de beide uiteinden verwijderd zijn |
De lengte van ee nstring
- Je kan de methode
length()gebruiken om de lengte te bepalen van een stuk tekst of string. Onder lengte verstaan we het aantal characters. Spaties en witruimte tellen ook mee als tekens. Bijvoorbeeld,
- Dit toont het volgende op het scherm:
De lengte van "Welkom bij Java!" is 16
Characters in een string
- Een string kan je zien als een opeenvolging van tekens in een bepaalde volgorde. De plaats in de rij wordt aangegeven door een index, die gaat van
0tots.length()-1. Hierbij is0de eerste character in de rij van tekens. De volgorde start dus vanaf 0 in Java. - Zo is het resultaat van
boodschap.charAt(0)gelijk aanW.

- Opgelet Een character ophalen buiten de grenzen van de string zal leiden tot een fout tijdens het uitvoeren. De index van een string is begrensd van
0totlength()-1. Zo zals.charAt(s.length())een fout geven met de meldingStringIndexOutOfBoundsException.
Concatenatie van strings
- Je kan strings concateneren (bij elkaar voegen) op twee manieren. Een eerste manier is via de methode
concat():
- Een tweede en meest gebruikte manier is het gebruik van het
+-teken. Bij wiskundige bewerkingen is+een optelling, maar als het+-teken omgeven is door strings zal dit een andere betekenis hebben en weet Java dat de concatenatie zal worden toegepast.
- Je kan ook het
+-teken gebruiken bij een string en een getal (bv. typeintofdouble). Dan zal Java impliciet (automatisch) het getal omzetten naar een string (bv. getal 1 wordt dan1en 65.64 wordt65.64) en deze string concateneren als string. Bijvoorbeeld
- In dit geval kunnen we ook de verkorte operator
+=gebruiken. Deze concateneert een stuk tekst met zichzelf.
- Stel dat
i = 1enj = 2, wat zal op het scherm komen bij de volgende uitdrukking?
- Het antwoord is
"i + j is 12", want"i + j is"wordt eerst concateneerd met de waarde vanien daarna met die vanj. De eerste optelling is de concatenatie-operator bij strings, maar hierdoor wordt de tweede ook diezelfde operator. Om de tweede optelling te doen forceren om de wiskundige optelling uit te voeren moeten we haakjes gebruiken:
Inlezen van een string via de console
- Om een string in te lezen vanuit de console, kan je
next()methode aanroepen van eenScannerobject. Volgens stuk code leest een zin in van 3 woorden:
Dit geeft hetvolgende als uitvoer:
Voer 3 woorden in gescheiden door een spatie: Welkom bij Java
s1 is Welkom
s2 is bij
s3 is Java
- De
next()methode leest een string in dat eindigt met een witruimte character (e.g. spatie, tab (\t) of enter (\n)). Een andere methodenextLine()leest een gander regel van tekst. De methode leest een string in dat eindigt met een druk van de Enter toets.
Vergelijken van strings
- De
Stringklasse bevat methodes om stukken tekst of strings met elkaar te vergelijken
| Methode | Beschrijving |
|---|---|
s2.equals(s1) |
Geeft true als de string s2 gelijk is aan de string s1 |
s2.contains(s1) |
Geeft true als de string s2 de string s1 bevat |
Conversie van String naar Getallen
- Je kan een string dat enkel cijfers bevat omzetten naar een getal. Om een string te converteren naar een type
int, gebruiken weInteger.parseInt(intString):
- Om een string naar een
doublete converteren, gebruiken weDouble.parseDouble(doubleString)als volgt:
- Je kan gemakkelijk een getal naar een string omvormen door de concatenatie-operator te gebruiken
Formatteren van uitvoer
De methode
System.out.printfwordt gebruikt om de uitvoer te formatteren
- Soms is het wenselijk om nummers in een bepaald formaat op het scherm te tonen. Bijvoorbeeld, het volgend stukkje code zal de interest gaan berekenen:
De uitvoer is
De interest in € bedraagt 16.404674
- Het heeft geen zin om een bedrag in € tot op 6 cijfers na de komma te tonen. Twee cijfers na de komma is genoeg. Dit kan je doen als volgt
De uitvoer wordt nu
De interest in € bedraagt 16.4
- Dit is nog altijd niet correct. We willen dat er
16.40op het scherm wordt getoond in plaats van16.4. Dit kunnen we oplossen met de methodeSystem.out.printf
De uitvoer wordt nu
De interest in € bedraagt 16.40
- De
finprintfstaat voor formatted en impliceert dat de methode iets op het scherm toont in een bepaald formaat. De syntax om de methode aan te roepen is
waarbij formaat een string is die bestaat uit kleinere strings en zogenaamde formaatspecificaties of in het Engels format specifiers.
- Een formaatspecificatie specifieert hoe een variabele moet geformatteerd worden. Een variable kan van het numerieke type zijn (
int,double,byte,short,float), een character (char) en een Booleaanse waarde (boolean) of een string (String). Een formaatspecificatie bestaat uit een percent teken (%) gevolgd door een conversiecode. Veel voorkomende formaatspecificaties vind je in onderstaande tabel:
| Formaatspecificatie | Uitvoer | Voorbeeld |
|---|---|---|
%b |
Een Booleaanse waarde | True of False |
%c |
Een character | 'a' |
%d |
Een decimaal geheel getal (integer) | 200 |
%f |
Een kommagetal | 45.460000 |
%e |
Een getal in wetenschappelijke notatie | 4.55600e+01 |
%s |
Een string | "Java is cool" |
- Een voorbeeld