Toon posts:

[Java] Boolean probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hoi, ik zal het probleem uitleggen. Stel er zijn 3 classes; class A , class B en class C.

Java:
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
class A
{
    //initialisatie
    boolean ikBenTrue;
    C database;

    //Constructor
    public A()
    {
          ikBenTrue = false;
          database = new C(); //een verwijzing naar een MySQL db waar een IP gecheckt wordt
    }

     public void a(Socket socket)
     {
             //als socket een IP heeft die in de MySQL db voorkomt moet ie ikBenTrue = true maken
            //heeftJuisteIpAdres is een boolean functie
             ikBenTrue = database.heeftJuisteIPadres(socket.getInetAddress().getHostAddress());
     }
}

//En class B bevat een stukje code:

class B
{
       //Initialisaties
       private boolean isWaar;
       A a;

       //Constructor
       public B()
      {
             isWaar = false;
             a = new A();
      }

      public void run() //de run methode, heb alle overbodige code weggelaten
     {
            //blah blah, nu komt de check
            isWaar = a.ikBenTrue;

            if(isWaar)
            {
                  doeIets();
            }
            else
            {
                  doeIetsAnders();
            }
     }
}


Het probleem is nu dat ie niet goed doorgeeft of ikBenTrue waar of niet waar is voor elke client met een bepaald IP adres.

Stel ikBenTrue was op een gegeven moment true. Als het IP dan uit de database wordt gehaald, zou ikBenTrue dus false moeten worden, maar dat gaat dus niet.

Zie ik iets over het hoofd? Een tip zou welkom zijn :)

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06-2025

drm

f0pc0dert

Java:
1
2
3
isWaar = a.ikBenTrue; 

if(isWaar) 

waarom maak je daar geen
Java:
1
if ( a.ikBenTrue )

van :?

Verder: weet je honderd procent zeker dat regel 18 in je testgeval wel gewoon true aan ikBenTrue toekent? Controleer dit door bijv even het resultaat van die toewijzing te printen met System.println oid :)

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
Lekker helder :/

Maar goed, sowieso roept hij nooit de check aan:
code:
1
2
A a = new A();
a.a(); // deze dus

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-08 10:39

Janoz

Moderator Devschuur®

!litemod

Het probleem vind ik niet helemaal duidelijk. In principe kan de ikBenTrue boolean alleen van waarde veranderen waneer a wordt aangeroepen (zoals het hier staat althans). Denk er trouwens wel om dat ikBenTrue rustig druk kan veranderen, maar dat isWaar echt niet mee gaat veranderen.

Daarnaast zou ik sowieso wat getters en setters gaan gebruiken. Public members vars is een 'beetje vies'..

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Ok, geef toe, het is misschien wat vaag op deze manier, maar probeerde alles wat er niets mee te maken had weg te laten. De if(a.ikBenTrue) wordt maar 1x aangeroepen in class B en dan moet ie dus de juiste waarde geven. Staat een IP in de database dan is ie true en anders false.

Dus stel dat voor IP 127.0.0.1 ikBenTrue = true. Als ik dan dat IP verwijder uit de database en die persoon start opnieuw zijn client op, dan wordt if(a.ikBenTrue) dus opnieuw aangeroepen, maar als hij blijft op true staan...en dat klopt dus niet :S

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 23-08 10:39

Janoz

Moderator Devschuur®

!litemod

Je zult eerst de methode a uit class A waarvan een instancie a in B is gemaakt weer uit moeten voeren wil die "ikBenTrue" boolean van waarde veranderen.

[ Voor 23% gewijzigd door Janoz op 26-02-2003 14:49 ]

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Topicstarter
Dat doet ie ook wel...

  • Paul
  • Registratie: September 2000
  • Laatst online: 19-08 15:39
Zoals Dash2in1 al zei, lijkt het erop dat a.a(mySocket) nooit wordt aangeroepen... Tenzij je dat er ook uitgeknipt heb :)

"Your life is yours alone. Rise up and live it." - Richard Rahl
Rhàshan - Aditu Sunlock


Verwijderd

Topicstarter
Ja die had ik er ook uitgehaals, maar heb het probleem al anders gefixed.
Pagina: 1