[Java] array's werken niet goed

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

  • bonfie
  • Registratie: Oktober 2000
  • Laatst online: 06:57
Ik heb een array gemaakt:

private Gemeente[] gemeentes = new Gemeente[100];

die vraag ik aan als:

while (gemeentes[teller] != null && gemeentes[teller].getNaam != gemeenteNaam && teller < 100){


Compiler kijk boos en wijst naar de eerst [ . Hij zegt: cannot resolve symbol

Weet iemand waarom?

  • D2k
  • Registratie: Januari 2001
  • Laatst online: 31-08 10:19

D2k

lama: geblaat :)

Doet iets met Cloud (MS/IBM)


Verwijderd

teller wel gedeclareerd?

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 15:49
Als je wat meer code post, wel.

Kun je een werkende klasse met uitsluitend de code die problemen oplevert geven?

  • bonfie
  • Registratie: Oktober 2000
  • Laatst online: 06:57
klopt, maar daar is geen probleem van. gemeentes is bij beide met kleine letters. De class Gemeente is er ook.

  • bonfie
  • Registratie: Oktober 2000
  • Laatst online: 06:57
nou de class gemeente:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Gemeente {
    
    private int aantalInwoners;
    private String naam;
    
    public Gemeente(String deNaam, int hetAantalInwoners) {
        naam = deNaam;
        aantalInwoners = hetAantalInwoners;
    }
    
    public String getNaam(){
        return naam;
    }
    
    public int getInwoners(){
        return aantalInwoners;
    }
    
}

class Provincie:
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
public class Provincie {
    
    private Gemeente[] gemeentes = new Gemeente[100];
    private String naam;
    
    public Provincie(String deNaam) {
        naam = deNaam;
    }
    
    public String getNaam() {
        return naam;
    }
    
    public int telGemeenten() {
        int teller = 0;
        while (gemeentes[teller] != null) {
            teller = teller + 1;
        }
        return teller - 1;
    }
    
    public int getInwoners() {
        int teller = 0;
        int inwoners = 0;
        while (gemeentes[teller] != null) {
            teller = teller + 1;
            inwoners = gemeentes[teller].getInwoners();
        }
        return inwoners;
    }
    
    public void maakGemeente(String gemeenteNaam, int aantalInwoners) {
        int teller = 0;
        while (gemeentes[teller] != null){
            teller = teller + 1;
        }
        gemeentes[teller] = new Gemeente(gemeenteNaam, aantalInwoners);
    }
    
    public int getInwonersUitGemeente(String gemeenteNaam) {
        int teller = 0;
        while (gemeentes[teller] != null && gemeentes[teller].getNaam != gemeenteNaam && teller < 100){
            teller = teller + 1;
        }
        if (teller > 100) {
            return 0;
        } else {
            return gemeentes[teller].getInwoners();
        }
    }
    
    public boolean bevatGemeente(String andereGemeente){
        int teller = 0;
        while (gemeentes[teller].getNaam != andereGemeente && teller < 100) {
            teller = teller + 1;
            if (gemeentes[teller] == null) {
                teller = 101;
            }
        }
        if (teller > 100) {
            return false;
        } else {
            return true;
        }
    }
}

Verwijderd

moeten er achter Gemeente geen haakjes komen -> Gemeente()
is een object he


dis fout :)

Verwijderd

Gebruik a.u.b. de [ code] [ /code] tags en indent het een en ander, dan kunnen we het nog lezen ook.

Verwijderd

Verwijderd schreef op 25 september 2002 @ 17:02:
moeten er achter Gemeente geen haakjes komen -> Gemeente()
is een object he
Gemeente is geen object maar een klasse, en waar zou je die haakjes dan willen hebben, bij de array declaratie?

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 30-08 23:12
Zelfde package ?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • bonfie
  • Registratie: Oktober 2000
  • Laatst online: 06:57
een van de problemen:
code:
1
2
3
4
5
D:\School\Semester 1\Java\Opdracht 26\Provincie.java:42: cannot resolve symbol
symbol  : variable getNaam  
location: class Gemeente
        while (gemeentes[teller] != null && gemeentes[teller].getNaam != gemeenteNaam && teller < 100){
                                                             ^

zegt de compiler

Verwijderd

bonfie schreef op 25 september 2002 @ 17:14:
een van de problemen:
code:
1
2
3
4
5
D:\School\Semester 1\Java\Opdracht 26\Provincie.java:42: cannot resolve symbol
symbol  : variable getNaam  
location: class Gemeente
        while (gemeentes[teller] != null && gemeentes[teller].getNaam != gemeenteNaam && teller < 100){
                                                             ^

zegt de compiler
getNaam is een methode, moeten dus haakjes achter: gemeentes[teller].getNaam()

edit: Verder kun je strings niet met == en != vergelijken, gebruik stringnaam.equals(anderestring) daarvoor

  • bonfie
  • Registratie: Oktober 2000
  • Laatst online: 06:57
JAAAHAHAHAHA probleem = haakjes vergeten :) Thanks for alle input en misschien helpt dit ook de andere mensen die haakjes vergeten.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Dit gaat trouwens ook problemen opleveren:
gemeentes[teller].getNaam != gemeenteNaam

Wat je daar doet is een adres vergelijking en niet een inhoudelijke string vergelijking. Je moet daarvoor de equals methode gebruiken.

[edit]
Ik zie dat Zef mij al voor was :)

Verwijderd

tipje: if (gemeentes[teller].getNaam.compareTo(gemeenteNaam)== 0,1)
0 is gelijk, 1 is ongelijk.

Ik zou wel willen weten wat het verschil is met equals.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

niets :)

ik snap alleen die komma niet, dus die 0,1 :?

Verwijderd

Alarmnummer schreef op 25 september 2002 @ 18:10:
niets :)

ik snap alleen die komma niet, dus die 0,1 :?
Daarmee geeft hij waarschijnlijk aan dat je daar tussen kunt kiezen ;)

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Verwijderd schreef op 25 september 2002 @ 18:05:
tipje: if (gemeentes[teller].getNaam.compareTo(gemeenteNaam)== 0,1)
0 is gelijk, 1 is ongelijk.

Ik zou wel willen weten wat het verschil is met equals.
Vaak geeft een compare niet alleen 0 of 1 terug, maar kan hij ook -1 teruggeven. equals heeft uiteraard maar twee mogelijkheden.
Zo'n compare is dan handig met sorteren enzo.

En ook nog even bijdehand doen en een iets kortere en efficiëntere versie van de code van de TS:

code:
1
2
3
4
5
6
7
8
9
public boolean bevatGemeente(String andereGemeente){
    int teller = 0;
    while (!gemeentes[teller].getNaam().equals (andereGemeente) && teller++ < 100) {
        if (gemeentes[teller] == null) {
            return false;
        }
    }
    return (teller < 101);
}

Never underestimate the power of


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Beetje gek om eerst een bewerking op gemeentes[teller] te doen en daarna te testen of ie null is...

Tegen die tijd heb je toch wel een nullpointerexception voor je kiezen...

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik zag het ook al.. En daarnaast maak je ook gebruik van magic numbers. (die 100 en 101). Slechte code dus (ik snap er verder ook niet veel van wat je daar wilt doen).

En arrays zijn een waardeloze structuur vanuit oo oogpunt (althans de implementatie in java is niet geweldig door het gebrek aan methodes). Je kan veel beter een List structuur gebruiken en daar de contains methode aanroepen. Maar aangezien je in een lijst van n elementen n/2 controles moet doen zijn er ook efficientere structuren bedacht zoals bv hash structuren en gesorteerde bomen. Ik zou persoonlijk gaan voor een HashMap om daar gemeentes in te plaatsen op basis van hun naam.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Ik geloof dat ik nog niet bijdehand genoeg was. |:(

Never underestimate the power of


  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Alarmnummer schreef op 25 september 2002 @ 19:00:
Ik zag het ook al.. En daarnaast maak je ook gebruik van magic numbers. (die 100 en 101). Slechte code dus (ik snap er verder ook niet veel van wat je daar wilt doen).
Magic? Slecht? Leg eens uit.
Misschien komt het inderdaad doordat je het niet snapt. :)
En arrays zijn een waardeloze structuur vanuit oo oogpunt (althans de implementatie in java is niet geweldig door het gebrek aan methodes). Je kan veel beter een List structuur gebruiken en daar de contains methode aanroepen. Maar aangezien je in een lijst van n elementen n/2 controles moet doen zijn er ook efficientere structuren bedacht zoals bv hash structuren en gesorteerde bomen. Ik zou persoonlijk gaan voor een HashMap om daar gemeentes in te plaatsen op basis van hun naam.
Misschien is de TS wel een beginner en is dat nog veel te ingewikkeld. ;)

Never underestimate the power of


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

cameodski schreef op 25 september 2002 @ 19:08:
Magic? Slecht? Leg eens uit.
Misschien komt het inderdaad doordat je het niet snapt. :)

Het gebruik van die waardes 100 en 101 (check of de teller onder de 100 blijft :? waarom niet array.length? :) en waarom niet "teller > array.lengt" als check bij de return?) is vrij onhandig op het moment dat je 200 gemeentes wilt verwerken :P

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
ACM schreef op 25 september 2002 @ 19:37:
Het gebruik van die waardes 100 en 101 (check of de teller onder de 100 blijft :? waarom niet array.length? :) en waarom niet "teller > array.lengt" als check bij de return?) is vrij onhandig op het moment dat je 200 gemeentes wilt verwerken :P
Ja, al die getalletjes hardcoded erin mikken, is inderdaad wel smerig. Maar het was ook niet bedoeld om de classes compleet te herschrijven/perfectioneren. Alleen effe een voorbeeldje gepost ter lering en ter vermaak en naar blijkt ook ter discussie.
De rest kan de TS er hopelijk zelf bij bedenken.

Never underestimate the power of


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Een magic number is een nummer waarvan de betekenis niet meteen duidelijk is. Je kunt beter een constante gebruiken zoals AANTAL_PROVINCIES_IN_NL of het gegeven laten bepalen door bv gemeentes.length
Misschien komt het inderdaad doordat je het niet snapt. :)
Nee, want ik begreep nog wel waarvoor je ze gebruikte.

Maar je voert oa eerst een methode uit op een element van die array om later te controlerne of dat element bestaat. En daarnaast zou ik dus niet weten wat je verder met die methode van plan bent.

Hoeveelste jaars ben je? Als je 1e jaars bent dan is het je nog vergeven, maar anders moeten ze even een notitie maken op je diploma ;)

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Alarmnummer, lees ook de reactie boven je even :P
cameodski is niet de topicstarter maar wilde alleen even een andere manier aanreiken ;)

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Alarmnummer schreef op 25 september 2002 @ 19:48:
Nee, want ik begreep nog wel waarvoor je ze gebruikte.

Maar je voert oa eerst een methode uit op een element van die array om later te controlerne of dat element bestaat. En daarnaast zou ik dus niet weten wat je verder met die methode van plan bent.
copy-paste is soms best moeilijk, zie ook mijn vorige post.
Hoeveelste jaars ben je? Als je 1e jaars bent dan is het je nog vergeven, maar anders moeten ze even een notitie maken op je diploma ;)
Mmm, is het tijdstip misschien een goeie smoes? :)
Nee, ik ben geen eerstejaars. Ben gewoon een geval apart. En diploma's zijn natuurlijk niet bedoeld voor misbruik. :)

Never underestimate the power of


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Het tijdstip is geen goeie smoes. De caffeine moet nog meer dan genoeg in je aderen zitten om zinnige antwoorden te geven, maar je code is echt beneden alle peil.

Wat vind je trouwens van deze constructie?
code:
1
2
3
int teller=0;
while(... && teller++ < 100){
}

die ++ bij teller is een postfix operatie, dit houd in dat hij uitgevoerd wordt nadat die expressie is uitgevoerd. Stel dat i 99 is, dan is 99<100 en je conditie houd, en daarna wordt dus i 1 opgehoogd, dus krijg je i=100 + gemeentes[i]=> IndexOutOfBoundsException

Daarnaast is je code gewoon k*t. Ik ben blij dat ik niet als collega progammeur want dan had ik persoonlijk er voor gezorgd dat je eruit geknikkerd werd. Iemand die de HIO heeft gedaan die mag dit soort slechte code gewoon niet schrijven.

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Alarmnummer schreef op 25 september 2002 @ 20:07:
Daarnaast is je code gewoon k*t. Ik ben blij dat ik niet als collega progammeur want dan had ik persoonlijk er voor gezorgd dat je eruit geknikkerd werd. Iemand die de HIO heeft gedaan die mag dit soort slechte code gewoon niet schrijven.
:) :) :)
Gelukkig denkt niet iedereen er zo over.
OK, meestal let ik wel een beetje beter op, maar het valt me op dat je wel erg boos wordt of lijkt dat maar zo. Zo iemand zou ik ook niet graag als collega willen hebben. :)

Never underestimate the power of


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Alarmnummer schreef op 25 september 2002 @ 20:07:
Het tijdstip is geen goeie smoes. De caffeine moet nog meer dan genoeg in je aderen zitten om zinnige antwoorden te geven, maar je code is echt beneden alle peil.

Wat vind je trouwens van deze constructie?
code:
1
2
3
int teller=0;
while(... && teller++ < 100){
}

die ++ bij teller is een postfix operatie, dit houd in dat hij uitgevoerd wordt nadat die expressie is uitgevoerd. Stel dat i 99 is, dan is 99<100 en je conditie houd, en daarna wordt dus i 1 opgehoogd, dus krijg je i=100 + gemeentes[i]=> IndexOutOfBoundsException

Daarnaast is je code gewoon k*t. Ik ben blij dat ik niet als collega progammeur want dan had ik persoonlijk er voor gezorgd dat je eruit geknikkerd werd. Iemand die de HIO heeft gedaan die mag dit soort slechte code gewoon niet schrijven.
En dat kan niet een klein beetje vriendelijker?
Iemand wijzen op fouten ok, maar iemand erop afflammen en erover blijven doorzagen...

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024

Alarmnummer

-= Tja =-

Ik had nog niet gezien dat hij afgestudeerd informaticus was, dus vandaar dat ik (er expres) hard op inging.

Jij gaat toch ook vreemd opkijken als je bij de dokter komt omdat je last heb van je elleboog. En de man die vraagt aan jou waar die elleboog nog maar precies zat?

ps:
ik zal er wel niets meer over zeggen want dat vinden jullie niet gezellig.

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

En dus ga je hier bekant iemand afvlammen :?

Je mag wmb best iemand wijzen op fouten, zelfs wel duidelijk/hard... Maar er is wel een grens en daar ben je met je vorige reply imho overheen gegaan of iig zeer dicht genaderd...

Je vergelijking slaat niet echt ergens op trouwens, wmb.

  • TheOneLLama
  • Registratie: Oktober 2000
  • Laatst online: 20-01-2022

TheOneLLama

A llama like no llama before

bonfie schreef op 25 september 2002 @ 16:54:
while (gemeentes[teller] != null && gemeentes[teller].getNaam != gemeenteNaam && teller < 100){

Weet iemand waarom?
while ((gemeentes[teller] != null) && (gemeentes[teller].getNaam() != gemeenteNaam) && (teller < 100))

heb je iets tegen haakjes??

Opera OpenOffice.org Jabber Psi jabber://llama@mordax.com


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Persoonlijk zie ik dan liever nuttig gebruik van whitespace: de prioriteiten zijn hier vrij duidelijk.

Zoiets gebruik ik meestal bij ingewikkelde condities:
code:
1
2
3
while( gemeentes[teller] != null
    && gemeentes[teller].getNaam() != gemeenteNaam
    && teller < 100)

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

Pagina: 1