1 Inhoud: Oefeningen bij de cursus java I. Reeksontwikkeling...1 II. Een tekst omzetten in hoofdletters...2 III. Klasse Punt: een oefening over klasse...
Oefeningen bij de cursus java Inhoud: I. Reeksontwikkeling .......................................................................................................................1 II. Een tekst omzetten in hoofdletters .............................................................................................2 III. Klasse Punt: een oefening over klassen ....................................................................................2 IV. Constructoren............................................................................................................................4 V. Oefening: klassen en afgeleide klassen.......................................................................................6 VI. De klasse Vector ........................................................................................................................9 VII. Een abstracte klasse ontwerpen ............................................................................................ 11 VIII. Een interface......................................................................................................................... 12 IX. Muntcalculator. ....................................................................................................................... 13 X. Boots het bekende spelletje Schuifpuzzel na in een applet ...................................................... 17 XI. Een applet converteren naar een toepassing .......................................................................... 20 XII. Absolute positionering ........................................................................................................... 22 XIII. Memory – het bekende geheugenspelletje nagebootst......................................................... 23
I. Reeksontwikkeling Bereken ex tot een bepaalde nauwkeurigheid. Gebruik een reeksontwikkeling in een while-lus. De reeksontwikkeling is:
ex ? 1? x ?
x 2 x3 xn ? ? ... ? ? ... 2! 3! n!
En hier is de code: /********************************************* Oefening op het gebruik van de while-opdracht Bereken e macht x tot bepaalde nauwkeurigheid. **********************************************/ public class Emacht { public static void main(String args[]) { double x=1.0; double nauwkeurigheid=1e-15; //stel de gewenste nauwkeurigheid in double term, som, vorigeSom; int i; //teller term=1; //reken tot het verschil < gewenste nauwkeurigheid som=1;vorigeSom=0; i=1; while (Math.abs(som-vorigeSom)nauwkeurigheid) { vorigeSom=som; term *= x/i; som += term; i++; } // en druk af System.out.println("e macht "+x+" is "+som); System.out.println("De lus werd "+i+" maal doorlopen."); } }
Oefeningen bij de cursus java door ir. C. Daniels
1
II. Een tekst omzetten in hoofdletters Een tekst, ingegeven via het toetsenbord, omzetten naar hoofdletters in een methode /************************************* Een tekst omvormen naar hoofdletters in een methode **************************************/ public class Hoofdl { static String Hoofdl(String s) { return s.toUpperCase(); } public static void main(String args[]) { byte b[]=new byte[50]; //voor read() String tekst; try { System.in.read(b); } catch (java.io.IOException e){} tekst=new String(b); System.out.println(Hoofdl(tekst)); } }
III. Klasse Punt: een oefening over klassen Ontwerp zelf een klasse Punt, met twee klassevariabelen de integer waarden x en y. Vul de klasse aan met constructoren, accessor-methoden en een methode toString() die een tekstversie teruggeeft van een object, en een methode AfstandTotOorsprong() die de afstand van dat punt tot de oorsprong berekend. /************************************* Punt.java - De klasse punt *************************************/ public class Punt { /**************************************************** de klassevariabelen x en y, omwille van de afscherming zijn ze private gedeclareerd *****************************************************/ private int x; private int y; /*********************************** De default constructor Eigenschappen van een constructor 1) is public 2) geen return-type 3) zelfde naam als klasse ************************************/ public Punt() { x=0; //initialiseer hier de beide waarden op nul y=0; System.out.println("Default constructor Punt aangeroepen."); } /*************************************************** Constructor 2 aanvaard 1 parameter xx, zowel x als y worden = xx
Oefeningen bij de cursus java door ir. C. Daniels
2
****************************************************/ public Punt(int xx) { x=xx; y=xx; System.out.println("Constructor #2 aangeroepen"); } /***************************************** Constructor 3 aanvaard 2 parameters voor x, en y resp. *****************************************/ public Punt(int xx,int yy) { x=xx; y=yy; System.out.println("Constructor #3 aangeroepen"); } /************************************* De "copy-constructor" aanvaard 1 parameters van het hetzelfde type als de klasse *************************************/ public Punt(Punt p) { x=p.x; y=p.y; System.out.println("Copy-constructor aangeroepen"); } /***************************************************** Accessor-methoden Laten toe de klassevariabelen te lezen of te wijzigen *****************************************************/ //wijzig x public void SetX(int xx) { x=xx; } //lees x public int ReturnX() { return x; } //wijzig y public void SetY(int yy) { y=yy; } //lees y public int ReturnY() { return y; } /******************************************** Andere methoden van de klasse *********************************************/ //Geef de waarde van de klassevariabelen //terug in een tekst public String toString() { return "x="+x+" y="+y; } //Bereken de afstand tot oorpsrong van een object public double AfstandTotOorsprong() { return Math.sqrt(x*x+y*y); } }
Oefeningen bij de cursus java door ir. C. Daniels
3
Hier de code van het hoofdprogramma: /********************************************** OefeningPunt.java - gebruikt de klasse Punt **********************************************/ public class OefeningPunt { public static void main(String args[]) { Punt P1= new Punt(); //roept defaultconstructor aan System.out.println("P1: "+P1.toString()); Punt P2 = new Punt(50); //roept constructor 2 aan System.out.println("P2:"+P2.toString()); Punt P3 = new Punt(10,200); //roept constructor 3 aan P3.SetX(100); //wijzig de waarde van x in 100 System.out.println("P3.x = "+P3.ReturnX()); Punt P4= new Punt(P3); //roept de copyconstructor aan System.out.println("P4:"+P4.toString()); //bereken afstand tot oorsprong van P4 System.out.println("Afstand tot oorsprog van P4:" + P4.AfstandTotOorsprong()); } }
De uitvoer van het prgramma ziet er als volgt uit: Default constructor Punt aangeroepen. P1: x=0 y=0 Constructor #2 aangeroepen P2:x=50 y=50 Constructor #3 aangeroepen P3.x = 100 Copy-constructor aangeroepen P4:x=100 y=200 Afstand tot oorsprog van P4:223.60679774997897 Process Exit..
IV. Constructoren Demonstreer het gebruik van constructoren in een klasse en de afgeleide klasse. Gebruik een klasse-methode om het aantal objecten te tellen. /********************************************* de superdklasse (Eng. parent-class) *********************************************/ class SuperKlasse { //een klassevariabele //protected: dus alleen de afgeleide klasse //krijgt toegang tot deze variabele protected String Naam; //object teller protected static int ObjectTeller=0; //default constructor public SuperKlasse() { System.out.println("Default-constructor superklasse"); Naam=new String("Java is geweldig..."); ObjectTeller ++; } // andere constructor public SuperKlasse(String n)
Oefeningen bij de cursus java door ir. C. Daniels
4
{ Naam=n; System.out.println("Constructor #2 superklasse"); ObjectTeller ++; } //een andere methode public void Toon() { System.out.println("Vanuit Toon() uit de superklasse:"); System.out.println(Naam); } //Een klasse-methode = gemeenschappelijk aan alle objecten //Toon het aantal geïnstantieerde objecten public static void AantalObjecten() { System.out.println("\nAantal geïnstantieerde objecten: "+ObjectTeller); } }
/******************************************** de afgeleide klasse: erft dus variabelen en methodes uit de hoofdklasse *******************************************/ class AfgKlasse extends SuperKlasse { protected int Getal; public AfgKlasse() { //roept automatisch default constructor uit de superklasse aan Getal=100; System.out.println("Default constructor uit de afgeleide klasse"); } public AfgKlasse(int n) { //roept automatisch default constructor van de superklasse aan Getal=n; System.out.println("Constructor #3 van de afgeleide klasse"); } public AfgKlasse(String s, int n) { super(s); //roept constructor 2 van de superklasse aan Getal=n; System.out.println("Constructor #3 van de afgeleide klasse"); } // "overrides" de methode Toon() uit de superklasse public void Toon() { System.out.println("Vanuit Toon() uit de afgeleide klasse:"); System.out.println(Naam+" "+Getal); } } public class TestAfgKlasse { public static void main(String args[]) { //roept de default constructor van de superklasse aan
Oefeningen bij de cursus java door ir. C. Daniels
5
System.out.println("\n*** object S van de superklasse ***"); SuperKlasse S=new SuperKlasse(); S.Toon(); //roept de default constructoren van de afgeleide klasse //en van de superklasse aan System.out.println("\n*** object A1 van de afgeleide klasse ***"); AfgKlasse A1= new AfgKlasse(); //object van de afgeleide klasse A1.Toon(); //roept constructor #2 aan van afgeleide klasse, //en de default constructor van de superklasse aan System.out.println("\n*** object A2 van de afgeleide klasse ***"); AfgKlasse A2=new AfgKlasse(111); A2.Toon(); //roept constructor #3 aan van afgeleide klasse, //en constructor #2 van de superklasse aan System.out.println("\n*** object A3 van de afgeleide klasse ***"); AfgKlasse A3=new AfgKlasse("Java is object georiënteerd",-555); A3.Toon(); //aanroep van een klase methode uit SuperKlasse SuperKlasse.AantalObjecten(); } }
De uitvoer van deze oefening is als volgt: *** object S van de superklasse *** Default-constructor superklasse Vanuit Toon() uit de superklasse: Java is geweldig... *** object A1 van de afgeleide klasse *** Default-constructor superklasse Default constructor uit de afgeleide klasse Vanuit Toon() uit de afgeleide klasse: Java is geweldig... 100 *** object A2 van de afgeleide klasse *** Default-constructor superklasse Constructor #3 van de afgeleide klasse Vanuit Toon() uit de afgeleide klasse: Java is geweldig... 111 *** object A3 van de afgeleide klasse *** Constructor #2 superklasse Constructor #3 van de afgeleide klasse Vanuit Toon() uit de afgeleide klasse: Java is object georiënteerd -555 Aantal geïnstantieerde objecten: 4
V. Oefening: klassen en afgeleide klassen Ontwerp een superklasse Punt met als klassevariabelen de coördinaten x, en y. Een afgeleide klasse AfgeleidPunt met klassevariabelen Grootte en Kleur. Deklareer de nodige constructoren, accessors, en een methode toString() die de eigenschappen van een punt als tekst weergeeft. Gebruik alles in een applet dat verschillende gekleurde cirkels tekent in een applet. Superklasse Punt ***************** * int x * * int y * *****************
--- >
Afgeleide klasse AfgeleidPunt ***************************** * int Grootte * * Color Kleur * *****************************
En hieronder de code van de bestanden Punt.java, AfgeleidPunt.java, en het applet Oefpunt.java, en het html-bestand Oefpunt.html met het applet. Oefeningen bij de cursus java door ir. C. Daniels
6
/********************************* Punt.java - De superklasse Punt *********************************/ public class Punt { //klassevariabelen //protected: alleen toegankelijk in afgeleide klassen protected int x; protected int y; //default constructor public Punt() { System.out.println("Default constructor uit Punt"); x=0; y=0; } //andere constructor public Punt(int xx, int yy) { System.out.println("Constructor #2 uit Punt"); x=xx; y=yy; } //copy constructor public Punt(Punt p) { System.out.println("Copy-constructor uit Punt"); x=p.x; y=p.y; } //accessors public int GeefX() { return x; } public int GeefY() { return y; } public void SetX(int xx) { x=xx; } public void SetY(int yy) { y=yy; } public String toString() { return "x= "+x+" y= "+y; } }
/******************************************************** AfgeleidPunt.java - de afgeleide klasse van klasse Punt ********************************************************/ import java.awt.*; public class AfgeleidPunt extends Punt { /* nieuwe klassevariabelen x en y reeds bekend uit superklasse Punt */ protected int Grootte; protected Color Kleur; //default constructor public AfgeleidPunt() { Grootte=1; Kleur= Color.black; System.out.println("Default constructor uit AfgeleidPunt"); } //andere constructor public AfgeleidPunt(int xx, int yy, int gr, Color kl)
Oefeningen bij de cursus java door ir. C. Daniels
7
{ super(xx,yy); Grootte = gr; Kleur = kl; System.out.println("Constructor #2 uit AfgeleidPunt"); } //copy-constructor public AfgeleidPunt(AfgeleidPunt ap) { super(ap.x,ap.y); Grootte = ap.Grootte; Kleur = ap.Kleur; System.out.println("Copy-Constructor uit AfgeleidPunt"); } //accessors public int GeefGrootte() { return Grootte; } public Color GeefKleur() { return Kleur; } public void SetGrootte(int gr) { Grootte = gr; } public void SetKleur(Color kl) { Kleur = kl; } //toString, "overrides" toString uit superklasse public String toString() { return super.toString() //roep die even aan voor x- en y-waarde +"\nGrootte : "+Grootte+" Kleur : "+Kleur; } }
/********************************************** OefPunt.java - oefening op afgeleide klasse ***********************************************/ import java.applet.*; import java.awt.*; public class OefPunt extends Applet { AfgeleidPunt P[]; //een array van punten AfgeleidPunt ExtraPunt; //nog ééntje extra voor de blauwe rand final int MAXPUNTEN=10; //final: MAXPUNTEN is een constante waarde //initialiseer applet public void init() { P = new AfgeleidPunt[10]; //eerste punt P[0]= new AfgeleidPunt(5,5,290,new Color(0,255,0)); //de andere punten for (int i=1;i<MAXPUNTEN;i++) P[i]= new AfgeleidPunt(50+5*i,50+5*i,20*i,new Color(25*i,255-25*i,0)); ExtraPunt=new AfgeleidPunt(P[0]); ExtraPunt.SetX(0); ExtraPunt.SetY(0); ExtraPunt.SetGrootte(300); ExtraPunt.SetKleur(Color.blue); } //en teken de objecten public void paint(Graphics g) { //ExtraPunt g.setColor(ExtraPunt.GeefKleur()); g.fillOval(ExtraPunt.GeefX(),ExtraPunt.GeefY(),
Oefeningen bij de cursus java door ir. C. Daniels
8
ExtraPunt.GeefGrootte(),ExtraPunt.GeefGrootte()); //De andere punten for (int i=0;i<MAXPUNTEN;i++) { g.setColor(P[i].GeefKleur()); g.fillOval(P[i].GeefX(),P[i].GeefY(), P[i].GeefGrootte(),P[i].GeefGrootte()); System.out.println(P[i].toString()); } } }