Informaticasite van het Sondervick College te Veldhoven                 © L.J.M van Haperen (bron : R.J. van der Beek)
 
[18.1 De methode paint]  [18.2 Interactie, ActionListener]  [18.3 Knoppen, images, try-catch]  [18.5 Listbox] 
[18.6 Vier op een rij, arrays]  [18.7 Bestanden]  [18.8 Klasse maken, messagebox]  [18.9 Overzicht] 

Java-opgaven

  1. Maak een applet waarin een regel staat met "Geef je lengte (in cm)" en daarachter een tekstvenster waarin de lengte kan worden ingevoerd.
    Daaronder een regel met "Geef je gewicht (in kg)" en daarachter een tekstvenster waarin het gewicht kan worden ingevoerd.
    Daaronder een knop met Geef de Body Mass Index erop.
    Daaronder een regel met "BMI: " en daarachter een tekstvenster voor de BMI
    Als er op de knop met Geef de Body Mass Index wordt geklikt verschijnt de BMI in het tekstvenster er onder.
    En in een venstertje verschijnt of de gebruiker overgewicht heeft of niet.
    Als er geen goede lengte en/of gewicht is ingevoerd verschijnt er een venstertje, waarin dat gemeld wordt.
    Aanwijzing :
    De formule voor de BMI is : Gewicht in kg gedeeld door (Lengte in m)2
    Een BMI hoger dan 25 betekent overgewicht.

  2. Een kwadratische vergelijking is van de vorm ax2 + bx + c = 0
    Zo'n vergelijking kun je oplossen met de abc-formule.
    Maak een applet waarin je om de waarden van a, b en c vraagt, en dat dan de oplossing van de vergelijking geeft.
    Doe dat op de volgende manier: Zet op het formulier een regel met "a =" en daarachter een tekstvenster waarin dat getal kan worden ingevoerd.
    Daaronder een regel waarop staat "b =" en daarachter een tekstvenster waarin dat getal kan worden ingevoerd.
    Daaronder een regel waarop staat "c =" en daarachter een tekstvenster waarin dat getal kan worden ingevoerd.
    Dan een button met als opschrift "Bereken !"
    Daaronder een regel met "D =" en daarachter een tekstvenster waarin de waarde van de discriminant ( D = b2 - 4ac ) verschijnt verschijnt als er op de Bereken-button wordt geklikt.
    Daaronder een regel met "x1 =" en daarachter een tekstvenster waarin de waarde van de eerste oplossing ( x1 = (-b + √ D)/(2a) ) verschijnt als er op de Bereken-button wordt geklikt, tenminste als die oplossing bestaat.
    Als die oplossing niet bestaat, dus als D < 0, dan moet er in dat tekstvenster "bestaat niet" verschijnen.
    En daar weer onder een regel met "x2 =" en daarachter een tekstvenster waarin de waarde van de tweede oplossing ( x2 = (-b - √ D)/(2a) ) verschijnt als die bestaat, en als die oplossing niet bestaat moet er ook in dat tekstvenster "bestaat niet" verschijnen.

    Aanwijzing :
    Eerst moet de discriminant D = b2 - 4ac worden berekend, en in het tekstvenster achter D= wordt geplaatst.
    Als D<0 is dan moet er in de laatste twee tekstvensters "bestaat niet" worden geplaatst.
    En anders moeten de twee oplossingen x1 = (-b + √ D)/(2a) en x2 = (-b - √ D)/(2a) worden berekend en in de laatste twee tekstvensters worden geplaatst.
    √ D bereken je m.b.v. de opdracht Math.sqrt(D)

  3. Inhoud van bol of kubus
    Maak een applet waarin een regel staat met "straal of ribbe" en daarachter een tekstvenster waarin die straal of ribbe kan worden ingevoerd.
    Daar onder een pulldownmenu, waarin de soort figuur uitgekozen kan worden. Er kan gekozen worden uit kubus en bol.
    Verder staat op het formulier een button met als opschrift "Geef de inhoud" met daarachter een tekstvenster waarin de inhoud verschijnt, als er op de knop met Geef de inhoud wordt geklikt.
    Als er geen figuur is uitgekozen, of als er geen (goed) getal is ingevoerd, verschijnt er een venstertje waarin dat vermeld wordt.

    Aanwijzing :
    Bij een kubus geldt, als de ribbe r is, voor de inhoud I = r3
    Bij een bol geldt, als de straal r is, voor de inhoud I = (4/3)*π*r3
    De waarde van pi krijg je met Math.PI

  4. Maak een applet waarop een aantal sommetjes in tekstvensters verschijnen, met achter elk sommetje een invoervak.
    Het aantal sommen wordt bepaald door een parameter in het aanroepende html-document.
    Het zijn keer-sommen met getallen tussen 5 en 10, die automatisch worden gegenereerd.
    Verder staat op de pagina een button met Controleer.
    Als op Controleer wordt geklikt dan worden de antwoorden gecontroleerd, en er wordt vermeld hoeveel antwoorden er goed zijn.

  5. Maak een applet waarmee het laadvermogen van een vrachtwagen kan worden berekend.
    Een vrachtwagen met 2 assen heeft een MTM (Maximaal Toegelaten Massa) van 19 ton, eentje met drie assen heeft een MTM van 26 ton en eentje met 4 assen heeft een MTM van 32 ton.
    Zet een regel op de pagina met "leeg gewicht:" en daarachter een tekstvenster waarin dat lege gewicht kan worden ingevoerd.
    Daaronder drie radio-buttons, met de opschriften 2 assen, 3 assen en 4 assen. Door het aanklikken van één van die option buttons kan het aantal assen worden gekozen
    Dan een knop met als opschrift "Bepaal laadgewicht"
    Daaronder een regel waarop staat "Laadgewicht: " en daarachter een tekstvenster waarin staat hoeveel ton gewicht er beladen mag worden.
    Dat verschijnt er in zodra er op de knop met "Bepaal laadgewicht" wordt geklikt.
    Als op die knop geklikt wordt, en er zijn niet genoeg gegevens ingevoerd (er is bijv. niet op een radio-button geklikt) dan verschijnt er een venstertje, waarin dat vermeld wordt.

  6. Maak een applet, waarop onderstaand formulier staat.
    De gebruiker voert de prijzen in van de gerechten.
    Verder selecteert de gebruiker een voor-, hoofd en nagerecht.
    En als er dan op Uitrekenen geklikt wordt, verschijnt de prijs in het onderste tekstvenster.



  7. Maak een applet, waarin een rechthoek wordt getekend en wel zo dat de lengte, de breedte en de opvulkleur bepaald worden door argumenten uit het html-bestand. Zorg er voor dat het applet meldingen geeft als de meegegeven argumenten onjuist zijn. Ook moet vermeld worden als de meegegeven lengte en/of breedte negatief of te groot zijn om in het appletvenster te passen.

  8. Maak een applet, waarop een tekstvenster staat waarin een woord kan worden ingevoerd.
    Daaronder een button met het opschrift "Draai om"
    Daaronder een regel met het opschrift "Omgedraaid:" en daarachter een tekstvenster.
    Als er op de button met "Draai om" wordt geklikt dan worden de letters van het ingevoerde woord omgedraaid, en dat omgedraaide woord verschijnt dan in het tweede tekstvenster.
    Aanwijzing :
    z.charAt(5) is de vijfde letter van de string z
    Andere manier: z.substring(4,5) levert ook de vijfde letter van de string z
    z.substring(3,8) is de substring van de string z, die bestaat uit de vierde t/m de achtste letter van de string z
    z.length is het aantal tekens van de string z

    Als de ingevoerde string in de variabele z wordt vastgelegd, en de nieuwe (omgedraaide) wordt in de variabele n vastgelegd, dan geldt:
    De eerste letter van n moet gelijk zijn aan de laatste letter van z, dus als je het aantal letters van het woord met a aangeeft dan moet er gelden: n1=z.charAt(a)
    De tweede letter van n moet gelijk zijn aan de op-een-na-laatste letter van z, dus er moet gelden: n2 = z.charAt(a-1)
    In het algemeen geldt voor de i-de letter: ni = z.charAt(a-i+1)
    En dat moet gebeuren voor zoveel waarden van i dat alle letters van het woord aan de beurt komen, daarvoor moet je dus een for-lus gebruiken. En dan moeten de letters van n achter elkaar geplakt worden tot een nieuw woord.

  9. Maak een applet waarop drie tekstvakken en een knop staan. Na invoeren van de lengte en de breedte en de opvulkleur in de tekstvensters en klikken op de knop wordt een rechthoek met de gewenste lengte en breedte getekend, en ingekleurd met de aangegeven kleur.
    Zorg er voor dat het applet een melding geeft als er geen positieve gehele getallen zijn ingevoerd, of als de getallen te groot zijn om in het appletvenster te passen.

  10. Maak een applet, waarin een tekstvenster staat waarin een woord kan worden ingevoerd.
    Daaronder een button met het opschrift "Codeer"
    Daaronder een regel met het opschrift "In geheimschrift:" en daarachter een tekstvenster.
    Als er op de button met "Codeer" wordt geklikt dan wordt het ingevoerde woord in geheimschrift omgezet, en dat geheimschrift verschijnt dan in het tweede tekstvenster.
    Het geheimschrift ontstaat door elke letter van het woord te vervangen door een letter die een eindje verder in het alfabet zit. Hoeveel er wordt opgeschoven wordt bepaald door een parameter in het aanroepende html-document.
    Denk er om dat aan het eind van het alfabet doorgedraaid wordt naar het begin, dus na de z komt weer de a, enz.
    Bijvoorbeeld: Test wordt Uftu, bij een opschuiving van één letter.
    Aanwijzing :
    z.charAt(5) is de vijfde letter van de string z
    Andere manier: z.substring(4,5) levert ook de vijfde letter van de string z
    z.length is het aantal tekens van de string z
    int a = (int) z.charAt(1) geeft de asc-code van de eerste letter van z
    int a = (int) z.charAt(2) geeft de asc-code van de tweede letter van z
    char s = (char) k levert het teken, waarvan de asc-code k is

    Als de ingevoerde string in de variabele z wordt vastgelegd, en de nieuwe (gecodeerde) wordt in de variabele n vastgelegd, dan ga je de eerste letter als volgt omzetten:
    int k = (int) z.charAt(1)
    char c = (char) (k+1)

    En dat moet niet alleen voor de eerste letter gebeuren, maar voor alle letters van het woord; daarvoor moet je dus een for-lus gebruiken. En dan moeten de letters van n achter elkaar geplakt worden tot een nieuw woord, dus beginnen met String n = ""; en verder bij de omzetting van elke letter n = n + c;

  11. Maak een applet, met twee tekstvensters en een button.
    Als je in het eerste tekstvenster een geheel getal onder de 20 invoert, en je klikt op de button, dan verschijnt in het tweede tekstvenster de faculteitswaarde van het eerste getal. Dus als je 5 invoert in het eerste tekstvenster dan verschijnt in het tweede tekstvenster 120 (want 5 faculteit = 5! = 1 x 2 x 3 x 4 x 5 = 120)
    Als er geen geheel getal, of een negatief getal of een getal groter dan 20 wordt ingevoerd dan wordt dat gemeld in het tweede tekstvenster

  12. Maak een applet, met twee tekstvensters en een button.
    Als je in het eerste tekstvenster een woord invoert, en je klikt op de button, dan verschijnt in het tweede tekstvenster hetzelfde woord, maar tussen elk tweetal letters is een streepje gezet.
    Dus als je in het eerste tekstvenster automobiel invoert verschijnt er in het tweede tekstvenster a-u-t-o-m-o-b-i-e-l

  13. Maak een applet, met twee tekstvensters en een button.
    Als je in het eerste tekstvenster een zin invoert, en je klikt op de button, dan verschijnt in het tweede tekstvenster dezelfde zin, maar zonder spaties. Alle spaties zijn uit de zin verwijderd.
    Dus als je in het eerste tekstvenster dit is een test invoert verschijnt er in het tweede tekstvenster ditiseentest

  14. Maak een applet, met een tekstvenster en een button.
    Als je een woord in het tekstvenster hebt ingevoerd, en je klikt op de button dan moet er onder worden vermeld hoeveel klinkers en hoeveel medeklinkers het ingevoerde woord bevat. (klinkers zijn a,e,i,o en u, de andere letters zijn medeklinkers) En verder moet het ingevoerde woord op een andere manier in het tekstvenster verschijnen: tussen elk tweetal letters van het woord moet een spatie staan.

  15. Maak een applet, met een tekstvenster en een button.
    Als je een woord in het tekstvenster hebt ingevoerd, en je klikt op de button dan moet er worden berekend wat de som is van de delers van het ingevoerde getal. Als bijvoorbeeld het getal 10 is ingevoerd dan zijn de delers 1, 2 en 5, en de som daarvan is 8
    (het getal 1 wordt dus wel meegeteld, maar het getal zelf niet)
    Als er geen geheel getal is ingevoerd, of het getal is kleiner dan 1, dan wordt dat vermeld.

  16. Maak een applet waarin een regel staat met "Kapitaal:" en daarachter een tekstvenstertje waarin een getal getypt moet worden, dat het kapitaal voorstelt.
    Daaronder staat een regel met "hoeveel % rente ?" en daarachter een tekstvenstertje waarin een getal getypt kan worden.
    Verder een button met als opschrift "Bereken verdubbelingstijd %"
    Zodra er op de Berekenbutton wordt geklikt verschijnt er in het document de waarde van het kapitaal na 1, 2, 3, ... jaren, als er elk jaar zoveel procent rente bij komt als ingetypt is.
    Dit gaat net zo ver door tot het kapitaal twee keer zo groot geworden.
    Als achter "Kapitaal" dus 1000 is ingevoerd, en achter "hoeveel % rente?" het getal 2, dan wordt er net zo lang doorgegaan tot het kapitaal 2000 euro of meer is geworden.
    Aanwijzing :
    Gebruik:
    While (k<2000)
    {...................................
    ...................................}
    dan worden de opdrachten op de stippeltjes net zo lang uitgevoerd als de waarde van k kleiner dan 2000 is. Er wordt dan dus gestopt met herhalen als k>=2000 is
    Verder geldt:
    Als de rente r % is en het kapitaal k, dan is het bedrag aan rente k*r/100, en het nieuwe kapitaal na een jaar is dan dus k + k*r/100

  17. Maak een applet waarin een regel staat met "Aantal keer gooien:" en daarachter een tekstvenstertje waarin het aantal getypt moet worden.
    Verder een button met als opschrift "Gooi" en daaronder een regel met als opschrift "Aantal zessen:" en een tekstvenster waarin het aantal zessen dat is geteld.
    Zodra op de button met "Gooi" wordt geklikt simuleert de computer het gooien met een dobbelsteen, net zo vaak als is aangegeven in het tekstvenster. Er wordt geteld hoe vaak er een zes wordt gegooid, en dat aantal verschijnt in het onderste tekstvenster.
    Aanwijzing :
    Math.floor(Math.random*6) + 1 levert een getal op tussen 1 en 6.

  18. Maak een applet, waarin een tekstvenster staat waarin een zin kan worden ingevoerd.
    Daaronder een button met het opschrift "Tel het bepaalde aantal letters"
    Daaronder een regel met het opschrift "aantal bepaalde letters in de zin:" en daarachter een tekstvenster.
    De letter die geteld moet worden wordt bepaald door een parameter in het html-document, dat het applet aanroept.
    Als die letter bijvoorbeeld de letter d is en er wordt op de button met "Tel het aantal bepaalde letters" geklikt, dan wordt dat aantal geteld en dat aantal verschijnt in de onderste tekstvenster.
    Als de parameter, die in het html-document wordt gegeven, geen geldige letter is, dan wordt dat gemeld en er wordt in dat geval niets geteld.
    Aanwijzing :
    z.charAt(5) is de vijfde letter van de string z
    Andere manier: z.substring(4,5) levert ook de vijfde letter van de string z
    z.substring(3,8) is de substring van de string z, die bestaat uit de vierde t/m de achtste letter van de string z
    z.length is het aantal tekens van de string z

    Je moet elke letter van het woord controleren, en als het een d is het aantal met één vermeerderen.
    Je moet dus een for-lus gebruiken:
    for (var i; i<=z.lenght;i++)
    {...................................
    ...................................}

  19. Maak een applet, waarin een tekstvenster staat waarin een woord kan worden ingevoerd.
    Daaronder een button met het opschrift "Controleer !"
    Daaronder een regel met het opschrift "Is het een palindroom ?" en daarachter een tekstvenster.
    Als er op de button met "Controleer" wordt geklikt dan wordt er gecontroleerd of het ingevoerde woord een palindrooms is. Als dat zo is dan verschijnt er in de laatste tekstvenster "ja" en anders "nee.
    Aanwijzing :
    Een palindroom is een woord dat het zelfde is als je het van achter naar voren leest, bijvoorbeeld lepel en parterretrap.

    z.charAt(5) is de vijfde letter van de string z
    Andere manier: z.substring(4,5) levert ook de vijfde letter van de string z
    z.substring(3,8) is de substring van de string z, die bestaat uit de vierde t/m de achtste letter van de string z
    z.length is het aantal tekens van de string z

    De eerste letter moet gelijk zijn aan de laatste letter, dus als je het aantal letters van het woord met a aangeeft dan moet er gelden: z.charAt(1)=z.charAt(a)
    De tweede letter van z moet gelijk zijn aan de op-een-na-laatste letter van z, dus er moet gelden: z.charAt(2) = z.charAt(a-1)
    In het algemeen geldt voor de i-de letter: z.charAt(i) = z.charAt(a-i+1)
    En dat moet je controleren voor alle waarden van i, daarvoor moet je dus een for-lus gebruiken:
    for (var i; i<=z.lenght;i++)
    {...................................
    ...................................}

  20. Maak een applet waarin een regel staat met "Binair getal: " en daarachter een tekstvenster waarin dat getal kan worden ingevoerd.
    Daaronder een regel waarop staat "Decimaal getal : " en daarachter een tekstvenster.
    Dan een button met als opschrift "Bereken !"
    Er wordt een binair getal ingevoerd (je mag er van uit gaan dat het uit 8 bits bestaat). En als er op de button wordt geklikt dan wordt de decimale waarde van het binaire getal getoond in de tekstvenster.
    Aanwijzing :
    z.charAt(5) is de vijfde letter van de string z
    Andere manier: z.substring(4,5) levert ook de vijfde letter van de string z
    g = parseInt(z.charAt(5)) levert de getalswaarde op van het vijfde teken van de string z
    z.length is het aantal tekens van de string z

    Het laatste cijfer moet keer 1, het cijfer daarvoor keer 2, het cijfer daarvoor keer 4 enz.

    Hoe doorloop je iets achterstevoren ?
    Als je de volgende regels invoert:
    For (var i=20;i>0;i--)
    {...................................
    ...................................}
    dan worden de opdrachten op de stippeltjes 20 keer uitgevoerd, en i doorloopt daarbij achtereenvolgens de waarden 20 tot en met 1 (dus van groot naar klein)

  21. Maak een applet waarin een regel staat met "Getal :" en daarachter een tekstvenstertje waarin een getal getypt moet worden tussen 10 en 100
    Daaronder een regel met de tekst "priemgetal ?" en daarachter een tekstvenster.
    Daaronder een button met het opschrift "Controleer !"
    Als er een getal in het eerste tekstvenster is ingevoerd, en er wordt op de controleer-knop geklikt, dan verschijnt er in het tweede tekstvenster "ja" als het getal een priemgetal is en anders "nee".
    Aanwijzing :
    Als je wilt controleren of een getal a een priemgetal is, dan moet je controleren of het deelbaar is door 2, 3, 4, enz. t/m a-1. Zodra het door één van die getallen deelbaar is dan is het geen priemgetal.
    Hoe controleer je of een getal ergens deelbaar door is ?
    a is deelbaar door i als (a / i) == Math.round(a / i)

  22. Maak een applet waarin een regel staat met "Teller : " en daarachter een tekstvenster waarin de teller van een breuk kan worden ingevoerd.
    Daaronder een regel met "noemer" en daarachter een tekstvenster waarin de noemer van een breuk kan worden ingevoerd.
    Daaronder een button met als opschrift "Vereenvoudig".
    Daaronder een regel en een tekstvenster met de nieuwe teller, en daar weer onder een regel en een tekstvenster met de nieuwe noemer. Zodra er op de button "Vereenvoudig" wordt geklikt wordt de breuk vereenvoudigd (als dat kan) en de nieuwe teller en noemer verschijnen in beeld. Als de breuk niet te vereenvoudigen is, dan zijn de nieuwe teller en noemer gelijk aan de oude teller en noemer.
    Aanwijzing :
    Als je de computer wilt laten controleren of de breuk a/b te vereenvoudigen is dan moet je laten controleren of a en b allebei deelbaar zijn door 2, 3 , 4 enz. t/m a (je mag er van uit gaan dat a kleiner of gelijk aan b is)

    Hoe controleer je of een getal ergens deelbaar door is ?
    a en b zijn beide deelbaar door i als ( (a / i) == Math.round(a / i) ) and ( (b / i) == Math.round(b / i) )

  23. Maak een applet waarin een tekstvenster staat waarin een getal kan worden ingevoerd.
    Daaronder nog een tekstvenster waarin een getal kan worden ingevoerd.
    Daarnaast een button met een +, een button met een -, een button met een x en een button met :
    En daaronder een derde tekstvenster waarin de uitkomst komt.
    Als je op de button met de + klikt dan worden de getallen in de eerste twee tekstvensters opgeteld, en het resultaat verschijnt in het derde tekstvenster.
    Als je op de button met de - klikt dan verschijnt het resultaat van de aftrekking van die twee getallen in het derde tekstvenster.
    En wat er bij een klik op de x-button en op de :-button gebeurt zal wel duidelijk zijn.

  24. Maak een applet, waarop een verkeerslicht staat zoals hiernaast.
    Dat verkeerslicht kan door middel van drie knoppen bediend worden. Bij de start zijn de drie lichten allemaal zwart.
    Klik je op de knop met het woord rood, dan zie je het rode verkeerslicht oplichten, de andere twee blijven zwart. Klik je op de knop met het woord groen, dan zie je het groene (dus onderste) verkeerslicht oplichten, de andere twee blijven of worden weer zwart. Enz.



  25. Maak een applet waarbij je vijf optel-sommetjes moet maken.
    Hoe groot de getallen minimaal en maximaal zijn kun je via het html-document, waar het applet op staat, doorgeven m.b.v. param.
    Maak het programma zo dat als de sommetjes gemaakt zijn er wordt afgedrukt hoeveel er goed waren en ook hoeveel tijd (in seconden) het maken geduurd heeft.
    Aanwijzing:
    Je hebt de klasse Date, waarmee de datum en de tijd kan worden opgevraagd.
    Die zit in de package java.util.
    Je moet dus bovenaan toevoegen import java.util.*;
    Of beter: import java.util.Date;
    (dan wordt alleen de klasse Date geimporteerd, dat kost minder geheugen en minder tijd)

    Je moet eerst een nieuwe datum-instantie declareren, dat gaat als volgt (als je die nu noemt:
    Date nu = new Date( );
    (N.B.: bij vrijwel alle klassen, behalve bij integers enz. en bij strings, moet er new bij de declaratie)

    En dan kun je de uren, minuten en seconden op de volgende manier opvragen:
    int uur=nu.getHours( );
    int minuut = nu.getMinutes( );
    int seconde = nu.getSeconds );
    Je moet de tijd twee keer opnemen : vlak voor er met de sommen wordt begonnen, en vlak nadat ze af zijn. Het verschil is de tijd die er over gedaan is.

  26. Maak een applet waarop een kleurenmenger is te zien
    Er zijn drie scrollbalken, waarmee je de hoeveelheid rood, groen en blauw kunt instellen. Zodra je een scrollbalk verzet verandert de kleur van de ellips er onder.
    Kijk bij H18.9 (overzicht) wat de methoden van een scrollbalk zijn.
    In de tekstvelden onder de scrollbalken wordt ook de hoeveelheid rood, groen en blauw weergegeven.
    Je kunt de kleur ook veranderen door in die tekstvelden getallen in te vullen


  27. Maak een applet waarop een listbox is te zien. In die listbox staan de maanden, maar niet in de goede volgorde. Zet ze er zo in:
    juni, april, december, januari, maart, november, augustus, juli, oktober, februari, mei, september
    Zet er een button met het opschrift Schuif omhoog op. En wel zo dat als je daar op klikt de geselecteerde maand een regel omhoog schuift
    En een tekstbox, waarin bij de start het getal 0 staat, en elke keer als je op de schuif_omhoog-button klikt moet dat getal met 1 verhoogd worden zodat je daaraan kunt zien hoeveel verschuivingen er nodig zijn om de maanden in de juiste volgorde te krijgen

    Voeg ook nog een knop aan het programma toe met het opschrift Sorteer, en een textbox met daarvoor een label met het opschrift Aantal verschuivingen. En zorg er voor dat in die textbox het aantal verschuivingen wordt bijgehouden als je op de knop Sorteer klikt, waardoor de lijst gesorteerd wordt met het bubble-sort algoritme.


  28. Maak een applet waarop je boter, kaas en eieren kunt spelen.
    Degene die aan de beurt is klikt op een hokje, en daar verschijnt dan X of O in, tenminste als het hokje leeg was.
    Zorg er voor dat als X of O gewonnen heeft, dat gemeld wordt en dat dan gevraagd wordt of er met een nieuw spelletje begonnen moet worden.
    Je kunt gebruik maken van een array van labels, zie daarvoor hoofdstuk 6

  29. Maak een applet waarop je het drie-deurenprobleem kunt laten zien.
    Je ziet drie deuren (rechthoeken) op het applet. Achter één ervan zit de hoofdprijs, en welke dat is door de computer door een toevalsgetal bepaald. Jij moet aanwijzen achter welke deur de prijs volgens jou zit. Dat doe je door op de deur te klikken. Je hebt op dit moment een kans van 1/3 om de juiste deur te kiezen.
    Als je op een deur geklikt hebt verschijnt daar een zwarte pijl onder (zie de figuur).
    Na een klik op de knop met het woord Ga verder opent de computer een andere deur, en wel de deur waar de hoofdprijs niet achter ligt. Als de juiste deur was aangewezen kan de computer bij het openen uit twee deuren kiezen, en dat doet hij dan at random. Die deur verandert dan in een smal wilt strookje (zie figuur).
    Er wordt bij het drie-deurenprobleem vervolgens gevraagd of je nog van deur wilt wisselen, want op dit moment heb je een kans van 1/2 om de juiste deur te kiezen. We gaan er van uit dat je dat wel doet.
    De pijl verschijnt nu onder de andere deur, en op de plaats waar de prijs zat zie je een rode cirkel verschijnen.
    In de tekstvenstertjes onder de deuren zie je vervolgens dat de aantallen worden bijgewerkt: hoe vaak je na wisseling goed zat en hoe vaak fout, en hoeveel procent dat is. En het aantal keren dat je al een deur hebt gekozen.
    De tekst op de knop is nu gewijzigd in Nog een keer, en als je er op klikt wordt het vorige herhaald.

       

  30. Maak een applet waarop je het volgende spelletje kunt spelen.
    Je begint met 50 punten, en je moet een bepaalde letter van het alfabet raden.
    Die letter wordt at random door de computer bepaald.
    Je typt een woord, en het programma zorgt er voor dat er wordt aangegeven hoevaak de betreffende letter in dat woord voorkomt.
    Als de letter niet in het woord voorkomt verlies je 10 punten.
    Als de letter wel voorkomt, maar minder dan 5 keer, dan verlies je 5 punten.
    Als de letter 5 keer of vaker voorkomt dan stopt het programma, en jij hebt gewonnen.
    Als je minder dan 0 punten hebt dan stopt het programma ook, en dan heb je verloren.

    Voorbeeld: de gevraagde letter is: F (maar dat weet je niet)
    Je hebt 50 punten. Typ een woord in. Maryhadalittlelamb
    In dat woord komt de letter 0 keer voor.
    Je hebt 40 punten. Typ een woord in. Herfleecewaswhiteassnow
    In dat woord komt de letter 1 keer voor.
    Je hebt 35 punten. Typ een woord in. Feefiefoefum
    In dat woord komt de letter 4 keer voor.
    Je hebt 30 punten. Typ een woord in. fffffffff
    Gefeliciteerd, je hebt gewonnen.


  31. Maak een applet waarop je het volgende spelletje kunt spelen.
    Het programma kent 20 woorden van acht letters (zet die in een array van Strings).
    Het programma kiest willekeurig één van de 20 woorden, en jij moet dat woord raden door steeds een letter te kopen.
    Je begint met 8 punten, en elke keer als je een letter invoert en die letter komt niet in het woord voor dan verlies je een punt.
    Als de letter wel in het woord voorkomt dan verlies je geen punt.
    Als je geen punten meer over hebt, en je hebt het woord nog niet geraden, dan heb je verloren.
    Als je het woord compleet hebt heb je gewonnen.

    Voorbeeld: Veronderstel dat het woord is: MYSTERIE
    Je hebt 8 punten, en het woord is ********
    Voer nu een letter in: E
    Je hebt 8 punten, en het woord is ****E**E
    Voer nu een letter in: N
    Je hebt 7 punten, en het woord is ****E**E
    Voer nu een letter in: A
    Je hebt 6 punten, en het woord is ****E**E
    Voer nu een letter in: O
    Je hebt 5 punten, en het woord is ****E**E
    Voer nu een letter in: I
    Je hebt 5 punten, en het woord is ****E*IE
    Voer nu een letter in: Y
    Je hebt 5 punten, en het woord is *Y**E*IE
    Voer nu een letter in: S
    Je hebt 5 punten, en het woord is *YS*E*IE
    Voer nu een letter in: T
    Je hebt 5 punten, en het woord is *YSTE*IE
    Voer nu een letter in: R
    Je hebt 5 punten, en het woord is *YSTERIE
    Voer nu een letter in: M
    Je hebt 5 punten, en het woord is MYSTERIE
    Gefeliciteerd, je hebt het woord geraden.


  32. Maak een applet waarin een methode voorkomt die een dobbelsteenkant tekent, waarbij je de waarde als parameter mee kunt geven.
    Laat het programma dan twee keer met een dobbelsteen gooien (dus twee keer een random-getal tussen 1 en 6 kiezen).
    Toon die twee getallen in het midden van het applet, en laat twee dobbelstenen (links een blauwe en rechts een rode) tekenen die die twee waarden laten zien.
    Maak de dobbelsteen van een vierkant van 100 bij 100. Verdeel dat vierkant in gebiedjes van 10 bij 10. In sommige van die gebiedjes moet een dikke stip worden geplaatst, in sommige niet.

     

  33. Maak een applet waarop je het volgende spelletje kunt spelen.
    Twee spelers mogen om de beurt één of meer keren met twee dobbelstenen gooien.
    Ze mogen zo vaak achter elkaar gooien als ze willen, en het totaal aantal punten wordt dan opgeteld bij wat ze al hadden.
    Maar als ze met beide dobbelstenen hetzelfde gooien krijgt de ander de beurt en is degene die dubbel gooide alle punten kwijt, en moet dus opnieuw beginnen.
    Als iemand de beurt aan de ander geeft zonder dubbel te hebben gegooid mag de behaalde punten bij zijn totaal optellen.
    Wie van de twee het eerst 100 punten heeft heeft gewonnen.

  34. Maak een applet waarin een methode voorkomt die een gezicht tekent, waarbij je de gezichtskleur als parameter mee kunt geven.
    Zorg er dan voor dat de volgende figuur verschijnt:



  35. Maak een applet waarop drie tekstvensters staan, waarin je getallen in kunt voeren.
    En een button met het opschrift "Teken de driehoek". Als je daarop klikt wordt er een driehoek getekend waarvan de zijden zo groot zijn als de drie ingevoerde getallen (als er als lengte bijvoorbeeld 5 wordt aangegeven, neem dan aan dat de lengte 500 pixels moet zijn, vermenigvuldig de getallen dus met 100). Tenminste als het mogelijk is.
    Als het niet mogelijk is om een driehoek te tekenen met zijden van de aangegeven lengten dan moet dat worden vermeld.
    Je kunt het programma eerst de hoeken laten berekenen, en die gebruiken om de figuur te tekenen.
    De hoeken kun je laten berekenen m.b.v. de cosinusregel:
    a2 = b2 + c2 - 2*b*c*cos α
    b2 = a2 + c2 - 2*a*c*cos β
    c2 = a2 + b2 - 2*a*b*cos γ

    Als je de cosinus van een hoek weet dan kan de hoek worden berekend met de methode Math.acos(x) (dat correspondeert met cos-1(x). Dan wordt de hoek berekend in radialen. Wil je hoek in graden dan moet er worden vermenigvuldigd met 57.2958.

    Er is een driehoek mogelijk als de twee kleinste zijden samen groter zijn dan de grootste zijde. Is dat niet het geval dan kan de driehoek niet worden getekend.
    Als de grootste zijde groter is dan de helft van de breedte van het applet moet dat ook worden vermeld en dan wordt er ook niets getekend.



  36. Maak een applet waarin een methode voorkomt die een dobbelsteenkant tekent, waarbij je de waarde als parameter mee kunt geven, en ook de x-coördinaat en de y-coördinaat van de linker bovenhoek van het vierkant.
    Zet zes buttons op het applet met daarop de getallen 1,2,3,4,5 en 6.
    Als je op een button klikt dan verschijnt links in het applet een rode dobbelsteen met de aangeklikte waarde.
    Verder gooit het programma met een dobbelsteen (het kiest dus een random-getal tussen 1 en 6).
    Rechts in het applet verschijnt dan een blauwe dobbelsteen met de gegooide waarde.
    Als jouw dobbelsteen hetzelfde aangeeft als de andere, of het verschil is één, dan heb je gewonnen, en anders heb je verloren. Of je gewonnen of verloren hebt verschijnt dan ook nog in beeld.
    Maak de dobbelsteen van een vierkant van 100 bij 100. Verdeel dat vierkant in gebiedjes van 10 bij 10. In sommige van die gebiedjes moet een dikke stip worden geplaatst, in sommige niet.

     

  37. Maak een applet waarmee een "Mandelbrotfiguur", zoals hieronder omschreven, wordt getekend.

    Mandelgetallen

    Voor elk punt (x,y) van het platte vlak, wordt een bijbehorend getal (het zogenaamde "mandelgetal") worden bepaald.
    Om het mandelgetal te kunnen uitrekenen, bekijken we eerst de volgende functie, die punten (a,b) van het vlak transformeert naar andere punten:
    f (a,b) = (a*a-b*b+x, 2*a*b+y)
    Let op: deze functie transformeert het punt (a,b), maar in de berekening speelt ook de waarde van x en y, dat is het punt waarvan we het mandelgetal willen bepalen, een rol.

    Deze functie f nu, passen we toe op het punt (a,b) = (0,0).
    Op het punt dat daar uitkomt, passen we nog eens de functie f toe. Op het punt dat daar weer het resultaat van is, passen we opnieuw f toe, enzovoorts enzovoorts.
    We stoppen pas met toepassen van f als het resultaat-punt een afstand van meer dan 2 tot de oorsprong heeft.
    Het mandelgetal is nu gelijk aan het aantal keren dat f is toegepast.

    Voor sommige punten (x,y) is dat meteen al zo, en is het mandelgetal dus gelijk aan 1. Voor andere punten duurt het langer: die hebben een groter mandelgetal.
    Er zijn ook punten waarbij je f kan blijven toepassen, zonder dat de afstand tot de oorsprong ooit meer dan 2 wordt: die punten hebben mandelgetal oneindig.

    In de praktijk kunnen we niet oneindig vaak een functie toepassen; daarom stoppen we met toepassen van f bij een bepaald maximum aantal keren, zeg 100 keer; is dan de afstand nog niet groter dan 2, dan nemen we maar aan dat het mandelgetal oneindig is.

    Een voorbeeld

    Als voorbeeld berekenen we het Mandelgetal van het punt (0.5, 0.8).
    We beginnen met (a, b)=(0, 0) en zetten de teller op 0.
    Bij het toepassen van de formule zijn a en b nog 0, en komen we dus uit op het punt (0.5, 0.8).
    De teller staat nu op 1. De afstand van (0.5, 0.8) tot (0, 0) is volgens Pythagoras wortel(0.25+0.64) = wortel(0.89) is ongeveer 0.94, en dat is niet groter dan 2. We mogen dus doorgaan.

    We berekenen met de formule de nieuwe a: 0.5*0.5 - 0.8*0.8 + 0.5 = 0.11
    en de nieuwe b: 2*0.5*0.8 + 0.8 = 1.6, en de teller komt op 2.
    De afstand van (0.11, 1.6) tot (0, 0) is volgens Pythagoras ongeveer 1.6038, dus we mogen nog steeds doorgaan.

    We berekenen met de formule weer een nieuwe a: 0.11*0.11 - 1.6*1.6 + 0.5 = -2.0479
    en een nieuwe b: 2*0.11*1.6 + 0.8 = 1.152, en de teller komt op 3.
    De afstand van (-2.0479, 1.152) tot (0, 0) is royaal meer dan 2, dus de teller blijft staan op 3.
    Het mandelgetal van (0.5, 0.8) is dus 3.

    De Mandelbrot-figuur

    Aan de hand van mandelgetallen kunnen we gemakkelijk een kleur van elk punt bepalen.
    Een mogelijkheid is deze:
    Punten met mandelgetal 1, 6, 11, enz worden wit, punten met mandelgetal 2 modulo 5 (d.w.z. 2, 7, 12, 17 enz) worden rood, met mandelgetal 3 modulo 5 geel, met mandelgetal 4 modulo 5 blauw en met mandelgetal 5 modulo 5 zwart. Ook punten met mandelgetal oneiding worden zwart.
    Teken je van elk punt de aldus bepaalde kleur, dan zie je een afbeelding van de Mandelbrot-figuur.
    Zo'n figuur ziet er bijvoorbeeld als volgt uit:



    Maak een applet voor de Mandelbrotfiguur.
    Ga er van uit dat de x-coordinaat van het middelpunt van het scherm 0 is, en de de y-coordinaat van het middelpunt van het scherm is ook 0.
    De schaalfactor mag je zelf bepalen. Bij een schaalfactor van bijvoorbeeld 0.01 is het zo dat als je een punt hebt dat 400 pixels rechts van het middelpunt ligt, de x-coordinaat 4 is.
    Het maximum aantal herhalingen van f mag je ook zelf bepalen.