Recursieve method en global variables in Java

Pagina: 1
Acties:
  • 198 views sinds 30-01-2008
  • Reageer

  • TimMer
  • Registratie: Februari 2000
  • Niet online
Hallo beste medeTweakers,
ik moet voor school in Java een progje bouwen. Nu is dat niet zo'n ramp, maar ik zit in de knel op één punt: een recursieve methode.

De situatie:
- "main" method met variabelen
- "recursief" method

Nu wil ik de method "recursief" variabelen uit de method "main" aanroepen, maar dan begint 'ie te piepen over "Can't make static reference to method void recursie(String mi, String ma) in class Boom".

Ik heb zelf al zitten puzzelen en kwam tot de conclusie dat ik global variables moet gaan gebruiken. Dan krijg ik dus in beide methods die eerdergenoemde foutmelding... |:(

Mijn vraag is dus: hoe krijg ik het voor elkaar om 2 methods dezelfde variabelen te laten gebruiken?

Verwijderd

Java en nog eens java. heb je wel New Boom(...) gedaan??

  • TimMer
  • Registratie: Februari 2000
  • Niet online
Op donderdag 08 november 2001 21:07 schreef robh het volgende:
Java en nog eens java. heb je wel New Boom(...) gedaan??
Ach ja, het is de toekomst hé... :)

Ik heb een instantie van Boom gemaakt ja, in de constructor.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
TimMer: Nu wil ik de method "recursief" variabelen uit de method "main" aanroepen, maar dan begint 'ie te piepen over "Can't make static reference to method void recursie(String mi, String ma) in class Boom".
Waarschijnlijk roep je dan de methode recursie aan via Boom.recursie. Dit kan alleen als de methode recursie static is en dus niet afhankelijk van een instantie. Als de methode recursie public is, moet je inderdaad een instantie van Boom aanmaken en de methode daarop aanroepen. Ik denk toch dat je daar iets verkeerd mee doet, want de melding is erg duidelijk. Laat anders eens wat code zien?

Overigens is de methode naam recursie niet erg prettig gekozen. Methodes moeten altijd aangeven wat ze doen met betrekking tot het object waarop ze worden aangeroepen. Dat die methode recursie recursief is, is een implementatie detail wat niet relevant is voor de naamgeving.
Ik heb zelf al zitten puzzelen en kwam tot de conclusie dat ik global variables moet gaan gebruiken.
Mwah, dat zou ik niet al te snel concluderen. Werken met globale variabelen is maar zeer zelden nodig en het zou zoveel mogelijk vermeden moeten worden. Helaas kan ik niet aangeven hoe je het wel moet aanpakken omdat je het probleem (de opgave) niet echt uitgelegd hebt... Als je dat even doet kan ik proberen om je de goede kant op te sturen ;) .
Mijn vraag is dus: hoe krijg ik het voor elkaar om 2 methods dezelfde variabelen te laten gebruiken?
Als je gewoon gegevens door wilt geven kan dat meestal gewoon met lokale variabelen en parameters doorgeven. Helaas is het probleem niet duidelijk, dus advies geven is dan ook lastig :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • roelio
  • Registratie: Februari 2001
  • Niet online

roelio

fruitig, en fris.

Dat komt waarschijnlijk hierdoor, je hebt een class:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Boom
{
   public static void main(String args[])
   {
    String a = new String();
    String b = new String();
    Boom boompje = new Boom();
    recursief(a, b); //HIER
   }

   void recursief(String mi, String ma)
   {
    ...
    recursief( ... , ...)
    ...
   }
}

hier gaat het volgende fout: jij wilt de methode recursief() aanroepen vanuit recursief() zelf, maar recursief "hoort niet" bij een object.
Daardoor kan recursief() niet aangesproken worden door recursief(), dus moet je een nieuw object Boom maken. Dat heb je ook wel gedaan, maar daarna heb je niet de methode recursief() van boompje (een instantie van Boom) aangeroepen, maar gewoon de methode recursief() uit de "static klasse" (zo heet het niet, maar ik bedoel de start klasse zegmaar, met de main() erin)...
Wat je dus moet doen, is de methode recursief() van boompje aanroepen met:

boompje.recursief(a, b)

in plaats van

recursief(a, b) of Boom.recursief(a, b)

dit op de plaats waar mijn //HIER commentaar staat...
Daarna moet je in de methode recursief() niet de recursief van boompje aanroepen maar daar weer gewoon recursief zonder instantienaam ervoor ... (zie de methode in mijn voorbeeld)

AMD Phenom II X4 // 8 GB DDR2 // SAMSUNG 830 SSD // 840 EVO SSD // Daar is Sinterklaas alweer!!


  • TimMer
  • Registratie: Februari 2000
  • Niet online
Bedankt voor de info alvast!! :) Hiermee kan ik denk ik nog wel even verder puzzelen. Nog een vraagje: moet method "main" niet "Boom" worden, zodat het de constructor wordt?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
(mbravenboer heeft nog niet geantwoord, dus doe ik het maar ;))
Op donderdag 08 november 2001 23:29 schreef TimMer het volgende:
Bedankt voor de info alvast!! :) Hiermee kan ik denk ik nog wel even verder puzzelen. Nog een vraagje: moet method "main" niet "Boom" worden, zodat het de constructor wordt?
nee, je main method moet zo blijven :) die wordt aangeroepen door java bij het starten van de programma. in main moet je normaalgesproken een instantie van de klasse maken, en dan een functie ervan aanroepen. is een beetje moeilijk uit te leggen, dus ik laat het wel zien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Boom
{
    public void start()
    {
      recursiefGedoe();
    }

    private void recursiefGedoe()
    {
      // ...
    }

    public static void main(String[] args)
    {
      // objectinstantie maken
      Boom boompje = new Boom();
      // start aanroepen
      boompje.start();
    }
}

zoiets

Verwijderd

Even tussendoor:
Stel je wilt wél global variables maken.

Waarom gaat dat dan fout met recursive calls?
Hoe kan je tóch een global variabele maken?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Ik denk niet dat globale vars gebruiken hier een oplossing is. De reden dat het niet werkte is namelijk dat main static is, en dus geen 'gewone' functies aan kan roepen. je kunt natuurlijk alles static maken, maar das niet bepaald een mooie oplossing ;)

  • hennink
  • Registratie: Augustus 2000
  • Laatst online: 13-09 06:59
Kijk maar eens goed naar je ontwerp als jij een global var wilt gaan gebruiken.
Gewoon netjes meegeven met de constructor of bak er een aparte class omheen.
Een net OO programma heeft enkel private vars en public/private functies.

alles wat aan kan, gaat kapot. De vraag is alleen wanneer.


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op vrijdag 09 november 2001 01:29 schreef hennink het volgende:
Een net OO programma heeft enkel [...] public/private functies.
aaah.... mag protected ook? ;)

  • tomato
  • Registratie: November 1999
  • Niet online
marcusk: aaah.... mag protected ook? ;)
Jaaah... dat mag ook :P

  • TimMer
  • Registratie: Februari 2000
  • Niet online
Op donderdag 08 november 2001 23:55 schreef marcusk het volgende:
(mbravenboer heeft nog niet geantwoord, dus doe ik het maar ;))
[..]

nee, je main method moet zo blijven :) die wordt aangeroepen door java bij het starten van de programma. in main moet je normaalgesproken een instantie van de klasse maken, en dan een functie ervan aanroepen. is een beetje moeilijk uit te leggen, dus ik laat het wel zien:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Boom
{
    public void start()
    {
      recursiefGedoe();
    }

    private void recursiefGedoe()
    {
      // ...
    }

    public static void main(String[] args)
    {
      // objectinstantie maken
      Boom boompje = new Boom();
      // start aanroepen
      boompje.start();
    }
}

zoiets
Ik heb het een paar uur geleden opgelost, met behulp van de vorige posts. Mijn code ziet er inderdaad zo'n beetje als hierboven uit, alleen roep ik die recursieve methode aan in "main", niet in method "start". Werkt goed, of zoals Linus Torwalds zou zeggen: "Hey, it compiles, so it must work!!" >:) Ik moet nu alleen nog de code in de recursieve methode goed gaan krijgen, feest is dat... |:(

Ik heb 2 strings, min en max, die allebei een letter bevatten. De tree is gevuld met letters en de user geeft de min en de max op. Hij moet nu recursief die letters gaan afdrukken, maar hoe kan ik ervoor zorgen dat hij bij iedere loop advancedt? Hij blijft nu namelijk hangen op de eerste, de min value dus.

  • TimMer
  • Registratie: Februari 2000
  • Niet online
Dit is de recursieve method voor zover ik hem heb weten te produceren:
code:
1
2
3
4
5
6
7
8
9
10
    void rangePrint (String mi, String ma, BinarySearchTree zoekBoompje) {
        try {
            System.out.println(zoekBoompje.find(new MyString(mi)));
            rangePrint(mi, ma, zoekBoompje);
        }
        catch (Exception e) {
            System.out.println( "" );
            System.out.println( e );
        }
    }

Moet ik soms met een array gaan werken ofzo? Of moet dit te doen zijn met de binarySearchTree-functies? Hiermee kan je de hoogste en laagste bepalen en afdrukken, de hoogste en laagste verwijderen, nodes toevoegen en verwijderen en de complete tree afdrukken.

Verwijderd

je geeft exact dezelfde variabelen door bij die recursive call.

Wat komt er binnen? mi, ma en zoekBoompje
Wat gaat er nu weg? mi, ma en zoekBoompje

Juist: exact hetzelfde. Meestal is een recursive call iets van blaat(x+1); of iets dergelijks.

Je moet natuurlijk wel zorgen dat bij iedere call er een variabele verandert, zodat je loopjes tenminste érgens stoppen.

  • TimMer
  • Registratie: Februari 2000
  • Niet online
Op vrijdag 09 november 2001 02:35 schreef Cheatah het volgende:
je geeft exact dezelfde variabelen door bij die recursive call.

Wat komt er binnen? mi, ma en zoekBoompje
Wat gaat er nu weg? mi, ma en zoekBoompje

Juist: exact hetzelfde. Meestal is een recursive call iets van blaat(x+1); of iets dergelijks.

Je moet natuurlijk wel zorgen dat bij iedere call er een variabele verandert, zodat je loopjes tenminste érgens stoppen.
True, true, ik bedoelde dus ook: de method staat er, maar hij doet nog niets. Dat heb ik even zo gelaten zodat hij nog wel compiled. :)

  • TimMer
  • Registratie: Februari 2000
  • Niet online
Op vrijdag 09 november 2001 02:35 schreef Cheatah het volgende:
je geeft exact dezelfde variabelen door bij die recursive call.

Wat komt er binnen? mi, ma en zoekBoompje
Wat gaat er nu weg? mi, ma en zoekBoompje

Juist: exact hetzelfde. Meestal is een recursive call iets van blaat(x+1); of iets dergelijks.

Je moet natuurlijk wel zorgen dat bij iedere call er een variabele verandert, zodat je loopjes tenminste érgens stoppen.
Dat is trouwens ook het punt: die nodes worden met strings gezocht, niet met integers. Ik kan de variabelen dus ook niet verhogen, de vraag is dus: hoe verhoog ik de waarde van een string? Volgens mij kan dat niet. Hij bevat dan wel maar een letter maar het blijft een string, dus tekst, waar geen wiskundige functies op losgelaten kunnen worden.

Of je convert hem helemaal niet naar string... Dan moeten de parameters ingesteld worden op nodes... :?

edit:
Ik lees hier net wat over String.compareTo(). Hiermee zou je strings lexicografisch kunnen vergelijken. Dat wordt een gedeelte van de oplossing, dat weet ik wel. :D


[Edit2] Idee: proberen een kopie te maken van de huidige boom met inhoud en al en dan alles buiten de opgegeven range verwijderen. Dan laagste gaan vergelijken met hoogste, steeds na iedere vergelijking laagste afdrukken en verwijderen, loop opnieuw doorlopen totdat de laatste (hoogste) node bereikt is. Hmm, ideetje? Nu nog eens kijken morgen of die boom daadwerkelijk met waarden en al te kopieëren is... :z *D
[/Edit2]

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op donderdag 08 november 2001 23:55 schreef marcusk het volgende:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Boom
{
    public void start()
    {
      recursiefGedoe();
    }

    private void recursiefGedoe()
    {
      // ...
    }

    public static void main(String[] args)
    {
      // objectinstantie maken
      Boom boompje = new Boom();
      // start aanroepen
      boompje.start();
    }
}

zoiets
mm, ik moet zeggen dat de methode start() niet zo gunstig gekozen is omdat het bij namelijk meteen aan Threads doet denken en daar heeft deze opgave niet zoveel mee te maken :)

ik denk dat je beter ipv een methode start daar een constructor van aan kan maken.

  • TimMer
  • Registratie: Februari 2000
  • Niet online
Ik weet het: het is een fucking groot brok code, maar ik wil toch weten wat er fout gaat. Kan iemand mij misschien op weg helpen? Het gaat om case 4, in combinatie met de recursieve functie "rangePrint".
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
import java.io.*;
import DataStructures.*;
import Exceptions.*;

public class Boom {//class

    public static void main(String [] args) {//main

        Boom letterBoom = new Boom();
        BinarySearchTree binaireZoekBoom = new BinarySearchTree();
        BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
        String oneLine = "", userLetter = "", userLetter2 = "", min = "", max = "", line = "-----------------------------------------------------------------";
        boolean UL1 = false, UL2 = false;

        System.out.println( "Opdracht week 4.\n\n" );

        while (oneLine != "1") {//while loop
            try {//menu try
                System.out.println( "1. Afsluiten" );
                System.out.println( "2. Letter toevoegen" );
                System.out.println( "3. Letter verwijderen" );
                System.out.println( "4. Geselecteerde selectie afdrukken" );
                System.out.println( "5. Totale boom in alfabetische volgorde afdrukken" );
                System.out.println( "" );

                oneLine = in.readLine( );

                switch (oneLine.charAt(0)) {//menu

                case '1':{
                    System.out.println( "" );
                    System.out.println( "U wilt stoppen ? Ok dan." );
                    System.exit(0);
                }

                case '2':{// Letter toevoegen aan boom
                      try {
                        System.out.println( "" );
                        System.out.println( "Voer uw toe te voegen letter in:" );
                        System.out.println( "" );
                        userLetter = in.readLine();

                        if (Character.isLetter(userLetter.charAt(0))) {
                            if (userLetter.length() != 1) {
                                System.out.println( "" );
                                System.out.println( "U mag slechts een letter tegelijk invoegen." );
                                System.out.println( "" );
                            }
                            else {
                                binaireZoekBoom.insert( new MyString(userLetter) );
                                System.out.println( "" );
                                System.out.println( "De letter " + userLetter + " is toegevoegd." );
                            }
                        }

                        else {
                            System.out.println( "" );
                            System.out.println("De ingevoerde waarde moet een letter zijn.");
                            System.out.println( "" );
                        }

                    }
                    catch(DuplicateItem e) {// Fouten opvangen en weergeven
                        System.out.println( "" );
                        System.out.println( e );
                    }

                    System.out.println( "" );
                    System.out.println( line );
                    System.out.println( "" );
                    break;
                }

                case '3':{// Letter verwijderen uit boom
                      try {
                        System.out.println( "" );
                        System.out.println( "Voer uw te verwijderen letter in:" );
                        System.out.println( "" );
                        userLetter = in.readLine();
                        binaireZoekBoom.remove( new MyString(userLetter) );
                        System.out.println( "" );
                        System.out.println( "De letter " + userLetter + " is verwijderd." );
                    }
                    catch(ItemNotFound e) {// Fouten opvangen en weergeven
                        System.out.println( "" );
                        System.out.println( e );
                    }

                    System.out.println( "" );
                    System.out.println( line );
                    System.out.println( "" );
                    break;
                }

                case '4':{//Range afdrukken
                      try {
                        System.out.println( "" );
                        System.out.println( "Voer de minimale letter in:" );
                        System.out.println( "" );
                        userLetter = in.readLine();                                                                 System.out.println( "" );
                        System.out.println( "Voer de maximale letter in:" );
                        System.out.println( "" );
                        userLetter2 = in.readLine();
                        System.out.println( "" );
//userLetter blok begin
                        if (Character.isLetter(userLetter.charAt(0))) {//userLetter
                            if (userLetter.length() != 1) {
                                System.out.println( "" );
                                System.out.println( "U mag slechts een letter invoeren." );
                                System.out.println( "" );
                            }

                            else {
                                UL1 = true;
                            }
                        }
                        else {
                            System.out.println( "" );
                            System.out.println("De ingevoerde waarde moet een letter zijn.");
                            System.out.println( "" );
                        }
//userLetter blok einde

//userLetter2 blok begin

                        if (Character.isLetter(userLetter.charAt(0))) {//userLetter2
                            if (userLetter2.length() != 1) {
                                System.out.println( "" );
                                System.out.println( "U mag slechts een letter invoeren." );
                                System.out.println( "" );
                            }

                            else {
                                UL2 = true;
                            }
                        }

                        else {
                            System.out.println( "" );
                            System.out.println("De ingevoerde waarde moet een letter zijn.");
                            System.out.println( "" );
                        }
//userLetter2 blok einde

                        if (UL1) {
                            if (UL2) {
                                min = userLetter;
                                max = userLetter2;
                                letterBoom.rangePrint(min, max, binaireZoekBoom);
                            }
                        }
                    }
                    catch(Exception e) {// Fouten opvangen en weergeven
                        System.out.println( "" );
                        System.out.println( e );
                    }

                    System.out.println( "" );
                    System.out.println( line );
                    System.out.println( "" );
                    break;
                }

                case '5':{//Boom afdrukken
                    System.out.println( "" );
                    System.out.println( "De boom bestaat uit de volgende letters:" );
                    System.out.println( "" );
                    binaireZoekBoom.printTree();
                    System.out.println( "" );
                    System.out.println( line );
                    System.out.println( "" );
                    break;
                }

                default:{//Standaardmelding
                    System.out.println( "Keuzemogelijkheden zijn 1 t/m 5, 1 om te stoppen");
                    System.out.println( "" );
                    System.out.println( line );
                    System.out.println( "" );
                    break;
                }

                }//menu

            }//menu try
            catch( Exception e ) {// Fouten opvangen en weergeven
                System.out.println( "" );
                System.out.println( e );
            }

        }//while loop

    }//main

    void rangePrint (String mi, String ma, BinarySearchTree zoekBoom) {//Afdrukken van een door de gebruiker opgegeven range

        MyString min;
        MyString max;
        MyString minMyString;
        String minUser = mi;
        String maxUser = ma;
        String minString = "";
        String maxString = "";
        int comparison;
        BinarySearchTree binaireZoekBoomTemp = (BinarySearchTree) zoekBoom;


        try {//Verwijder nodes lager dan range
            min = (MyString) binaireZoekBoomTemp.findMin();
            minString = min.toString();
            comparison = minString.compareTo(minUser);
            while ( comparison < 0) {
                binaireZoekBoomTemp.remove( min );
                comparison = minString.compareTo(minUser);
                min = ((MyString) binaireZoekBoomTemp.findMin());
                minString = min.toString();
            }
        }
        catch (Exception e) {// Fouten opvangen en weergeven
            System.out.println( "" );
            System.out.println( e );
        }


        try {//Verwijder nodes hoger dan range
            max = (MyString) binaireZoekBoomTemp.findMax();// Hoogste node vinden en opslaan in MyString max
            maxString = max.toString();// MyString max naar String maxString converteren
            comparison = maxString.compareTo(maxUser);// Hoogste node vergelijken met de hoogste node uit de door de gebruiker opgegeven range
            while (comparison > 0) {// Zolang de hoogste node hoger is dan de hoogste node uit de door de gebruiker opgegeven range loop uitvoeren
                binaireZoekBoomTemp.remove( max );// Hoogste node verwijderen
                comparison = maxString.compareTo(maxUser);// Hoogste node vergelijken met de hoogste node uit de door de gebruiker opgegeven range
                max = ((MyString) binaireZoekBoomTemp.findMax());// Hoogste node vinden en opslaan in MyString max
            }
        }
        catch (Exception e) {// Fouten opvangen en weergeven
            System.out.println( "" );
            System.out.println( e );
        }


        System.out.println( "" );
        System.out.println("De volgende letters komen voor in de door u ingevoerde range:");


        try {//Afdrukken range
            binaireZoekBoomTemp.printTree();
            //System.out.println(binaireZoekBoomTemp.findMin());// Laagste node afdrukken

            min = (MyString) binaireZoekBoomTemp.findMin();// Laagste node vinden en opslaan in MyString min
            minString = min.toString();// MyString min naar String minString converteren

            max = (MyString) binaireZoekBoomTemp.findMax();// Hoogste node vinden en opslaan in MyString max
            maxString = max.toString();// MyString max naar String maxString converteren

            comparison = minString.compareTo(maxString);// Laagste node met hoogste node vergelijken

            while ( comparison < 0) {// Zolang de laagste node niet gelijk is aan de hoogste node loop uitvoeren
                binaireZoekBoomTemp.remove( min );// Laagste node verwijderen
                comparison = minString.compareTo(maxString);// Laagste node met hoogste node vergelijken
                min = ((MyString) binaireZoekBoomTemp.findMin());// Laagste node vinden  en opslaan in MyString min
                minString = min.toString();// MyString min naar String minString converteren
                rangePrint(minString, maxString, binaireZoekBoomTemp);// Method rangePring opnieuw uitvoeren
            }

        }
        catch (Exception e) {// Fouten opvangen en weergeven
            System.out.println( "" );
            System.out.println( e );
        }
    }

}//class

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

tip om je code wat compacter te maken als je een lege regel wiltt printen om een andere regel kun je dit:
code:
1
2
3
System.out.println("");
System.out.println("Tekst");
System.out.println("");

vervangen door:
code:
1
System.out.println("\nTekst\n");

* wasigh heeft verder te weinig tijd om je code echt door te spitten..

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
Ik heb even snel naar je code gekeken. 't Is niet echt lekker te lezen hé? ;) Eén opmerking alvast:
code:
1
2
3
4
5
6
7
8
9
10
11
0. try {//Verwijder nodes lager dan range
1.   min = (MyString) binaireZoekBoomTemp.findMin();
2.   minString = min.toString();
3.   comparison = minString.compareTo(minUser);
4.   while ( comparison < 0) {
5.     binaireZoekBoomTemp.remove( min );
6.     comparison = minString.compareTo(minUser); 
7.     min = ((MyString) binaireZoekBoomTemp.findMin());
8.     minString = min.toString();
9.   }
0. }

Dit is niet helemaal zoals het hoort. De compareTo in regel 6 gebeurt voordat je minString hebt aangepast en geeft dus dezelfde uitkomst als de vorige compareTo. De while lus wordt dus één keer teveel aangeroepen.
Dit geldt ook voor de volgende twee while lussen in de code.

Hoe moet de 'boom' er eigenlijk uit komen te zien?
Pagina: 1