Informaticasite van het Sondervick College te Veldhoven                 © L.J.M van Haperen (bron : R.J. van der Beek)
 
  Opgaven hoofdstuk 18      


1. De methode paint
a. Maak een applet dat de volgende tekening maakt:

b. Maak een applet waarin twee even grote rechthoeken naast elkaar worden afgebeeld.
De afstand tussen de rechthoeken en de afstand links en rechts tot aan de rand van het venster moet net zo groot zijn als de breedte van elk van de rechthoeken.
De afstand onder en boven de rechthoeken moet net zo groot zijn als de hoogte van de rechthoeken.
De grootte van het applet wordt niet in het applet zelf vastgelegd, maar in het html-document dat het applet bevat.
c. Maak een applet waarin je naam met grote letters wordt afgedrukt, en daaronder bij de start het getal 1.
Laat telkens als de methode paint gelopen heeft dit getal met één verhogen, en afdrukken.
Zet in het html-document, waarin het applet staat, ook behoorlijk wat tekst, zodat je het document kunt scrollen.
Kijk wat er gebeurt als je het applet een aantal keren weg scrollt en weer laat verschijnen.


2. Knoppen en tekstvensters
a. Maak een applet, waarop een knop staat met het opschrift "Klik op mij", en rechts daarvan nog een knop met het opschrift "Klik liever op mij".
Daar onder staat de volgende tekst: Er is 0 keer op de linker knop geklikt en 0 keer op de rechter.
Na klikken op de rechter knop verandert deze tekst in:
Er is 0 keer op de linker knop geklikt en 1 keer op de rechter.
En het aantal wordt na elke klik één groter.
b. Maak een applet, waarop een knop staat met het opschrift "Spring een stukje".
Daar onder staat links in het venster een dikke stip (die kun je maken met een gekleurde cirkel). En die staat bij elke klik op de knop een eindje verder, eerst naar rechts, dan weer terug, enz.
c. Maak een applet met twee tekstvakken en een knop met het opschrift "Teken de rechthoek".
In het eerste tekstvak staat bij de start het woord lengte, en in het tweede tekstvak het woord breedte.
Er kunnen twee getallen in de tekstvakken (de woorden lengte en breedte moeten eerst worden verwijderd) worden ingevoerd.
Na een klik op de knop wordt dan onder de interactie-componenten een rechthoek met de gewenste lengte en breedte getekend.


3. Knoppen en tekstvensters
a. Maak een applet waarin een label staat met "Getal 1" en daarachter een tekstvenster waarin een getal kan worden ingevoerd.
Daaronder een label met "Getal 2" en daarachter een tekstvenster waarin een tweede getal kan worden ingevoerd.
Daar weer onder een knop met als opschrift "Geef het kleinste getal", en daar achter een tekstvenster.
Je moet in de eerste twee tekstvakken getallen in kunnen vullen, en als je dan op het de knop met Geef het kleinste getal klikt dan moet het kleinste van de twee getallen in het laatste tekstvenster komen.
b. Maak een applet waarin een label staat met "Straal cirkel : " en daarachter een tekstvenster waarin die straal kan worden ingevoerd.
Daaronder een label met "Oppervlakte" en daarachter een tekstvenster waarin die opp. verschijnt (afgerond op 2 decimalen) zodra de straal is ingevoerd.
En daar weer onder een label met "Omtrek" en daarachter een tekstvenster waarin die omtrek verschijnt (afgerond op 2 decimalen) zodra de straal is ingevoerd.
Als er een negatief getal of geen getal als straal wordt ingevoerd dan moet dat worden vermeld.
Aanwijzing : Oppervlakte = 3.14 * straal * straal en Omtrek = 2 * 3.14 * straal


4. Meer methoden, applet met parameters
a. Maak een programma waarbij bij het starten een keer-som verschijnt met getallen tussen 5 en 10 (zoiets als 7 x 8 =). En als het antwoord is ingetypt, en er is op enter gedrukt, verschijnt er op een label "Goed zo" als het goed is. En als het fout is, verschijnt er op het label: "Fout, het goede antwoord is ..." met op de stippeltjes natuurlijk het goede antwoord.
b. Maak een programma waarbij bij het starten alleen maar een knop zichtbaar is, waarop staat "Geef een som".
Als je daarop klikt verschijnt er een optelsom met getallen tussen 20 en 30 (zoiets als 27 + 21 =). En als het antwoord is ingetypt, en er is op enter gedrukt, verschijnt er op een label "Goed zo" als het goed is. En de som verdwijnt.
En als het fout is, verschijnt er op het label: "Fout, nog eens", en het antwoord wordt gewist (maar de som blijft staan).
En dan kan er een nieuw antwoord worden ingevoerd.
c. Maak een programma waarbij bij het starten een label staat met "Vertaal in het engels", en daar achter een tekstbox met het woord "tafel".
Daar onder staat een label met "Vertaling:", en daar achter een tekstbox waarin het antwoord kan worden ingevoerd.
En als het antwoord is ingetypt, en er is op enter gedrukt, verschijnt er op een label "Goed zo" als het goed is. En als het fout is, verschijnt er op het label: "Fout, het goede antwoord is ..." met op de stippeltjes natuurlijk het goede antwoord.
d. Laat een cirkel tekenen waarvan de straal en de opvulkleur worden bepaald door waarden van parameters, die in het html-bestand van het applet worden gegeven.
Daarbij mag voor de kleur in het html-document alleen het (nederlandse) woord rood, blauw of geel worden gebruikt. Als er een andere kleurnaam wordt gebruikt moet dat worden gemeld door het applet.
Zorg dat het applet ook een melding geeft als de meegegeven waarde van de straal onjuist is.
Ook moet in het applet een melding worden gemaakt als de meegegeven straal negatief of te groot is om in het appletvenster te passen.


5. De klasse List
a. Je gaat in deze opgave een programma maken waarmee je een lijst van namen kunt bijwerken.
Je maakt eerst de interface op de volgende manier:
Zet op het applet een listbox, een tekstvenster, en daaronder een knop met als opschrift Voegtoe onder de geselecteerde
En zet er nog een knop onder met als opschrift Wijzig de geselecteerde
En nog een knop met als opschrift Verwijder de geselecteerde
Zet in de lijst van de listbox de namen Jeanet, Tim en Marian



b. Maak het programma uit opdracht 5a zo, dat als je op een naam in de listbox klikt, deze naam ook in het tekstvenster ernaast verschijnt.
c. Maak het programma uit opdracht 5b zo dat als je de naam in de tekstbox verandert, en je klikt op de voegtoe-onder-geselecteerde-knop, de naam aan de lijst wordt toegevoegd en wel onder de geselecteerde.
d. Maak het programma uit opdracht 5c zo dat als je de naam in de tekstbox verandert, en je klikt op de wijzig-geselecteerde-knop, de geselecteerde naam in de lijst wordt gewijzigd.
Aanwijzing:
In de listbox kun je een naam niet rechtstreeks wijzigen.
Verwijder daarom de geselecteerde en voeg de gewijzigde naam op die zelfde plaats toe.
e. Maak het programma uit opdracht 5d zo, dat als je een naam aanklikt in de listbox, en je klikt op de verwijder-knop, de naam uit de lijst verwijderd wordt.
f. Maak het programma uit opdracht 5e zo dat als je de naam in de tekstbox verandert (of een naam invoert), en je drukt op de entertoets, de naam aan de lijst wordt toegevoegd en wel onderaan.


6. Arrays
a. Maak een applet waarin je de maanden van het jaar in een array zet. Zet op het applet een tekstvak, waarin je een getal van 1 t/m 12 kunt intikken. Zet op het applet een knop met het opschrift "Geef de naam van de maand".
Na klikken op de knop wordt meegedeeld met welke maand dit getal overeenkomt. Als er een ander getal dan 1 t/m 12 is ingevoerd dan verschijnt de mededeling dat dit geen maand is.
b. Maak een applet waarin een dambord wordt getekend (10x10 vakjes) met behulp van twee geneste lussen. De vakjes zijn om en om zwart en wit.


7. Zelf een klasse maken
a. Maak de klasse Breuk, die in paragraaf 18.8.4 beschreven staat.
Dat doe je door in JCreator te klikken op Files → New → tabblad Files → Java File.
Als naam voer je in: Breuk.
Verder maak je een nieuw project, waarin je gebruik gaat maken van de klasse Breuk.
Maak een applet waarin je de breuekn 1/3 en 1/4 laat optellen. De uitkomst (de teller en de noemer en ook de waarde) laat je afdrukken op het scherm (in de paint-methode).
Verder laat je de breuk 12/15 vereenvoudigen. Ook die uitkomst (de teller en de noemer en ook de waarde) laat je afdrukken op het scherm (in de paint-methode).
b. Maak een klasse Rekenwerk, met de methoden machtsVerheffing en faculTeit (en zonder attributen).
De methode machtsVerheffing heeft twee integers als parameters, namelijk het grondtal en de exponent. De terugkeerwaarde is van het type long.
De methode geeft bijvoorbeeld 32 als resultaat bij machtsVerheffing(2, 5);
De methode faculTeit heeft één parameter van het type integer en het terugkeertype is van het type long. Het getal "n faculteit", genoteerd met een uitroepteken (n!), is het product van alle positieve gehele getallen tot en met n.
Dus bijvoorbeeld 5 faculteit, genoteerd als 5!, wordt als volgt berekend: 5 . 4 . 3 . 2 . 1 = 120
De methode faculTeit levert dus het getal 120 bij faculTeit(5);
Je kunt bij beide methoden gebruik maken van recursie:
Bij de machtsverheffing kun je reduceren tot een machtsverheffing met een exponent die één lager is: machtsVerheffing(g,e) = g * machtsVerheffing(g,e-1)
Als het programma dan nog weet dat machtsVerheffing(g,0)=1, dan kan elke macht worden berekend.

Ook bij faculteiten kun je gebruik maken van recursie, bij de faculteit van een getal kun je reduceren tot een faculteit van een getal dat één lager is: faculTeit(n) = n * faculTeit(n-1)
Als het programma dan nog weet dat faculTeit(0)=1, dan kan elke faculteit worden berekend.
c. Maak een programma waarbij de interface er als volgt uitziet:



Als je een getal in het tekstvenster achter "getal" invoert en je drukt op enter, dan wordt in het tekstvenstertje rechts ervan de faculteit van dat getal afgedrukt.
Als je een getal in het tekstvenster achter "grondtal" en een getal in het tekstvenster achter "exponent" invoert en je drukt op enter, dan wordt in het tekstvenstertje achter "macht" de macht afgedrukt.
Als de invoer onjuist is wordt dat gemeld in het tekstvenster, waarin normaal het antwoord verschijnt.
Maak gebruik van de klasse Rekenwerk uit opgave 7b


8. Theorie
a. Wat is het verschil tussen bytecode en machinecode?
b. Wat is het verschil tussen een compiler en een interpreter? Geef van beide een programmeertaal, waarbij het gebruikt wordt.
c. Wat is de functie van een Java-compiler?
d. Wat doet de JVM?
e. Wat is een IDE?
f. Java is case-sensitive. Wat betekent dat?
g. Methoden kunnen private en public zijn, wat betekenen die woorden voor het gebruik van die methoden?
h. Welke gewoonte bestaat er in de naamgeving van klassen, methoden en objecten?
i. Noem drie packages, die je kunt importeren zonder dat je een bestand moet toevoegen.
j. Waar slaat het woordje this op bij de opdracht Dimension d=this.getSize();
k. Welke methoden worden standaard door Java bij de start van een applet uitgevoerd?
l. Wat is in Java de opdracht om een cirkel met middelpunt (200,150) en een straal van 80 pixels te tekenen?
m. Wat doet de methode repaint()? Wanneer gebruik je deze methode?


9. Theorie
a. Wat voor soort opdracht is: int p;
b. Wat voor soort opdracht is: p=5;
c. Hoe kun je de opdrachten uit 9a en 9b combineren tot één opdracht?
d. Nog zo'n opdracht als in 9c, waarbij de declaratie en de creatie worden gecombineerd, is:
Font lett1 = ... Font("Arial",Font.BOLD,16);
Op de stippeltjes is een woordje weggelaten. Welk woordje is dat, en wanneer moet dat beslist worden toegevoegd?
e. Stel dat een double-variabele gegeven is, bijvoorbeeld: double g = 10.25;
Hoe kun je dit getal converteren naar een string?
f. Stel dat de volgende string gegeven is: String s = "1234";
Hoe kun je deze string converteren naar een integer-waarde?
g. Wat is het verschil tussen de volgende twee berekeningen in java?
double r1 = 3 / 2;
double r2 = 3.0 / 2;
h. Wat is typecasting? Wanneer gebruik je dat?
i. Wat zijn in java de tekens voor de logische operatoren and en or, die je soms in de voorwaarde bij een if-opdracht gebruikt?
j. Schrijf een for-statement dat alle oneven getallen van 7 tot en met 21 op het scherm zet.
k. Schrijf een while-statement in java dat gelijkwaardig is met:
for( int i = 0; i < 11; i++ ) {g.drawLine(i*10, 50, 200, 200);}


10. Theorie
a. Wat is een actionlistener?
b. Met welke opdracht voeg je een actionlistener toe aan een button met de naam btnTest?
In welke methode moet die opdracht geplaatst worden?
c. Wat doet de methode actionPerformed(ActionEvent)
d. Wat moet je aan de header van het applet toevoegen om er voor te zorgen dat een actionlistener werkt?
e. Hoe kun je de parameter ActionEvent bij de methode actionPerformed(ActionEvent) gebruiken?


11. Theorie
a. Met welke opdracht kun je een getal (variabele g van het type integer) omzetten naar een string s?
b. Geef een voorbeeld waarbij de omzetting van een getal naar een string nodig is.
c. Met welke opdracht kun je een string s omzetten in een getal (variabele g van het type integer)?
d. Geef een voorbeeld waarbij de omzetting van een string naar een getal nodig is.
e. Als je een tekstvenster met de naam txtGetal hebt, dan kun je in de methode actionPerformed(ActionEvent) voor dat tekstvenster de volgende opdracht plaatsen:
int g = Integer.parseInt(txtGetal.getText());
In bepaalde gevallen zal er dan een foutmelding komen, wanneer?
f. Hoe kun je voorkomen dat er een foutmelding komt bij de opdracht uit 11e?


12. Theorie
a. Wat is een klasse?
b. Wat is een constructor?
c. Wat is een retourwaarde? Wat is de engelse benaming er voor?
d. Wanneer gebruik je void bij een methode?
e. Hoe declareer je een array (met de naam rij) voor tien integer-getallen en vul je deze met de waarden 1 tot en met 10?
f. Hoe kun je de lengte van een array (met de naam rij) opvragen?