Hoofdstuk Strings en arrays
Primitieve types nint gehele getallen-17, -5, 0, 3, 178 ndouble reëele getallen3.141, 2.0, -1.5E8 nbool waarheidswaarden false, true nchar losse symbolen’A’, ’B’, ’Z’, ’a’, ’4’, ’#’, ’:’
string versus char nstringchar nklasseprimitief type nobject-verwijzingdirecte waarde nnul, een of meer…precies één symbool n"" "A" "hello" ’A’ noperatoren, methoden properties, indexeroperatoren u==, +==, +, <= uSubstring, ToUpper uLength us[i]
String-methodes nint Length nboolEquals(string s) nstringConcat(string s) nstringSubstring(int start) nstringSubstring(int start, int eind) nstringToUpper( ) nstringToLower( )
concat en substring nString s, t, u, v, w; ns = “ham”; nt = “burger”; nu = s.Concat(t); nv = u.Substring(3); nw = u.Substring(3, 7); s t u v w hamburger hamburger burger burg hamburger s + t ; “van en met” “tot en zonder”
Publieksvraag nSchrijf een methode Beginstuk met twee string-parameters x en y die bepaalt of x het beginstuk van y is nSchrijf een methode Onderdeel met twee string-parameters x en y die bepaalt of x ergens als substring van y voorkomt
Methode Beginstuk (string x, string y)boolpublic static kortlang {}{} y. Substring( 0, x.Length ) x == return ; Beginstuk
Methode Onderdeel (string x, string y)boolpublic static {}{} Onderdeel y. Substring(t) Beginstuk(x, ) if ( ) return true; for (t=0; t<y.Length; t++) return false; int t;
Meer string-methodes nboolStartsWith(string s) nboolEndsWith(string s) nintindexOf(string s) public static bool Onderdeel(string x, string y) { return y.IndexOf(x)>=0 ; }
string versus array nKlassen Type met speciale syntax nSpeciale index-notatie string s = new string();char[] a = new char[10]; c = a[2];a[3] = c; nSpeciale quote-notatie s = "hallo"; nProperty a.Length nProperty s.Length nMethoden s.Substring(3,5); s.IndexOf(t); nIndexer -notatie c = s[2];s[3] = c;
Publieksvraag n//schrijf een static methode die telt hoe // vaak een symbool voorkomt in een string n//voorbeeld-aanroep: int n; n = Demo. Freq(’e’, "some text" ); n// hint: gebruik een for opdracht
Tel symbool-frequentie public static int Freq(char x, string s) { s[t]==x for (int t=0; t<s.Length; t++) if ( ) aantal++; int aantal; aantal = 0; return aantal; }
IBM/DOS Geschiedenis van char n1970s:6 bits = 64 symbols 26 letters, 10 digits, 28 leestekens n1980s: 7 bits = 128 symbols +26 lowercase, +5 leestekens, 33 control n1990s: 8 bits = 256 symbols +letters met accenten n2000s: 16 bits = symbols +Grieks, Cyrillisch, Japans, Devangari,... ASCII ANSI/ISO Unicode
Character coding code 0 code 127 code 48 code 32 code 65 code 97
char bijzonderheden nalfabetisch geordend char c; if ( ’A’<=c && c<=’Z’ ) … nconverteerbaar naar int int n; n = c + 32; nen terug c = (char) n;
Conversies nConversie naar “grotere” waarde kan altijd double d; int n; d = n; int n; char c; n = c; Control x; Button b; x = b; nConversie naar “kleinere” waarde is gevaarlijk n = (int) d;c = (char) n;b = (Button) x;
twee tekens in de broncode, toch één character! Speciale char-waarden nLetterlijk symbool nSpeciaal symbool nHet quote-symbool nHet backslash-symbool ’A’ ’\n’ ’\’’ ’\\’ ’&’ ’\t’ ’\”’
LetterTeller TextBox invoer Label uitvoer StaafDiagram diagram class LetterTeller : Form class StaafDiagram : UserControl class TurfTab
Letterteller hoofdklasse class LetterTeller : Form { } TextBox invoer; Label uitvoer; StaafDiag diagram; LetterTeller() { invoer = new TextBox(); invoer.MultiLine = true; uitvoer = new Label(); diagram = new StaafDiag(); } invoer. TextChanged += this.bereken; void Bereken(object o, EventArgs ea) { } TurfTab tabel = new TurfTab(); invoer.Text tabel.Turf ( ); tabel.ToString() uitvoer.Text = ; tabel.Waardesdiagram.Waardes =;
De klasse TurfTab public class TurfTab { private int [ ] tellers; private int totaal; public TurfTab ( ){... } public void Turf (string s){... } override public string ToString ( ) {... } private void turf (char c){... } } klasse-ontwerp: wat is... & wat kan... & hoe? public int Totaal {... } public int Waardes{... }
De klasse TurfTab public class TurfTab { private int [ ] tellers; private int totaal; public TurfTab ( ) { } tellers = new int [26]; } public void Turf (string s) { } this.turf ( s[t] ); for (t=0; t<s.Length; t++) int t;
public class TurfTab { private int [ ] tellers; private int totaal; De klasse TurfTab private void turf (char c) { } tellers [ ] ++; totaal++; } if (c>='A' && c<='Z') { } c - 'A' if (c>='a' && c<='z') { tellers [ c - 'a' ] ++; totaal++; }
public class TurfTab { private int [ ] tellers; private int totaal; t + ":" + tellers[t] + "keer\n" ; De klasse TurfTab override public string ToString( ) { } } string result; return result; result = ""; result += for (t=0; t<26; t++) int t; result += "totaal:" + totaal; ( + 'A')(char)
public class TurfTab { private int [ ] tellers; private int totaal; De klasse TurfTab } public int Totaal { } een eigen property! get { } set { } return totaal; totaal = value; "mini- methodes"
public class TurfTab { private int [ ] tellers; private int totaal; De klasse TurfTab } public int Totaal { } een eigen property! get { } set { } return totaal; totaal = value; "mini- methodes" geen set-minimethode: read-only property
public class TurfTab { private int [ ] tellers; private int totaal; De klasse TurfTab } public float Gemiddelde { } get { } return (float)totaal / tellers.Length; get mag ook nog rekenwerk doen public int[] Waardes { } get { } return tellers.Clone(); geef een kopie van de private array
alleen set-minimethode: write-only property public class StaafDiag : UserControl { De klasse StaafDiag } public StaafDiag() { this.Paint += this.teken; } private void teken(object o, PEA pea) { } //...FillRectangle...waardes... private int[] waardes; public int[] Waardes { } set { } this.waardes = value; this.Invalidate(); wie de property verandert, forceert een Paint
public class StaafDiag : UserControl { De klasse StaafDiag } private void teken(object o, PEA pea) { private int[] waardes; } pea.Graphics.FillRectangle( for (int t=0; t<waardes.Length; t++) Brushes.Blue, 0, t * balkH, balkU * this.waardes[t], balkH-1 ); float balkH = this.Height / waardes.Length; float balkU = this.Width / max; int max= Bieb.Grootste(max); if (max<10) max = 10;
naamtype void () blok parameters methode member
naamtype void operator op () blok parameters methode member
naamtype void operator op () blok parameters naam()parameters methode constructor member
naamtype base void operator op () blok parameters naam()parameters ()expressie, this : methode constructor member
naamtype base void operator op () blok parameters naam()parameters ()expressie, this : methode constructor naamtype, =initialisatieconst ; veld member
naamtype base void operator op () blok parameters naam()parameters ()expressie, this : methode constructor naamtype, =initialisatieconst ; veld naamtype{}blok set get member property
naamtype base void operator op () blok parameters naam()parameters ()expressie, this : methode constructor naamtype, =initialisatieconst ; veld naamtype{}blok set get typeparameters[]this indexer member property