Toon posts:

[java] probleempje

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ben bezig met een progje om wat extra te oefenen voor school.
Nu heb ik er al verschillende gemaakt en kom ik steeds weer bij hetzelfde probleem uit.
Namelijk als ik mijn objecten uit een array wil afdrukken wordt er steeds de info van het laatste object afgedrukt.
Ik weet dus dat ik ergens iets fout doe, maar ik vind het niet, of ik zie het niet,
Kan iemand me hier mee helpen?
Ik zal de code van voorbeeld progje even hier plaatsen:

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
public class Zintuig {
    private static String naam;
    private static String actie;
    /**
     * 
     */
    public Zintuig(String nm, String act) {
        setNaam(nm);
        setActie(act);
    }
    /**
     * @return the naam
     */
    public String getNaam() {
        return naam;
    }
    /**
     * @param naam the naam to set
     */
    public static void setNaam(String naam) {
        Zintuig.naam = naam;
    }
    /**
     * @return the actie
     */
    public String getActie() {
        return actie;
    }
    /**
     * @param actie the actie to set
     */
    public static void setActie(String actie) {
        Zintuig.actie = actie;
    }

    
}

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
public abstract class Lichaamsdeel {
    public static String naam;
    public static String positie;
    public static Zintuig zintuig;
    
    /**
     * 
     */
    public  Lichaamsdeel(String nm, String pos, Zintuig zin) {
        naam = nm;
        positie = pos;
        zintuig = zin;
    }

    /**
     * @return the naam
     */
    public static String getNaam() {
        return naam;
    }

    /**
     * @param naam the naam to set
     */
    public static void setNaam(String naam) {
        Lichaamsdeel.naam = naam;
    }

    /**
     * @return the positie
     */
    public static String getPositie() {
        return positie;
    }

    /**
     * @param positie the positie to set
     */
    public static void setPositie(String positie) {
        Lichaamsdeel.positie = positie;
    }

    /**
     * @return the zintuig
     */
    public static Zintuig getZintuig() {
        return zintuig;
    }

    /**
     * @param zintuig the zintuig to set
     */
    public static void setZintuig(Zintuig zintuig) {
        Lichaamsdeel.zintuig = zintuig;
    }

    public abstract void output();
    
    public abstract String beweeg(String str);
}

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
public class Oog extends Lichaamsdeel {
    private static Color k;
    /**
     * @param nm
     * @param pos
     * @param zin
     */
    
    public Oog (String nm, String pos, Zintuig zin){
        super(nm, pos, zin);
    }
    
    /**
     * @param nm 
     * @param pos
     * @param zin
     * @param k
     */
    public Oog(String nm, String pos, Zintuig zin, Color k) {
        super(nm, pos, zin);
        setK(k);
        // TODO Auto-generated constructor stub
    }

    
    
    /**
     * @return the k
     */
    public static Color getK() {
        return k;
    }



    /**
     * @param k the k to set
     */
    public static void setK(Color k) {
        Oog.k = k;
    }



    
    @Override
    public String beweeg(String str) {
        return ("Met mijn " + str + " kan ik knipperen.");
        
    }


    @Override
    public void output() {
        System.out.println( "Mijn " + this.naam + " bevindt zich " + this.positie + "." + "\n" + 
        "\tDe iris van mijn" + this.naam + " heeft deze kleur: " + this.k + "." + "\n" +
        beweeg(this.naam) + "\n" +
        "Als zintuig heb ik " + this.zintuig.getNaam() + " waardoor ik kan " + this.zintuig.getActie() + ".\n");
        
    }

}

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
public class Oor extends Lichaamsdeel {

    /**
     * @param nm
     * @param pos
     * @param zin
     */
    public Oor(String nm, String pos, Zintuig zin) {
        super(nm, pos, zin);
        // TODO Auto-generated constructor stub
    }


    @Override
    public String beweeg(String str) {
        return ("Met mijn " + str + " kan ik flapperen.");
        
    }

[s][/s]
    @Override
    public void output() {
        System.out.println( "Mijn " + naam + " bevindt zich " + positie + "." + "\n" + 
        beweeg(naam) + "\n" +
        "Als zintuig heb ik " + zintuig.getNaam() + " waardoor ik kan " + zintuig.getActie() + ".\n");
        
    }

}

zo zijn er ook nog klassen voor neus, mond en hand


En dan de main, waar het denk ik de mist in gaat:
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
public class TestLichaam {

    
    public static void main(String[] args) {
        Lichaamsdeel [] lichaamsdelen = {
                new Oog("linker oog", "in mijn oogkas",
                            new Zintuig("zicht", "zien"), Color.blue),
                new Oog("rechter oog", "in mijn oogkas",
                            new Zintuig("zicht", "zien"), Color.blue),
                new Oor("linker oor", "aan de zijkant van mijn hoofd",
                            new Zintuig("gehoor","horen")),
                new Oor("rechter oor", "aan de zijkant van mijn hoofd",
                            new Zintuig("gehoor","horen")),
                new Neus("neus", "in het midden van mijn gezicht",
                            new Zintuig("reuk","ruiken")),
                new Mond("mond", "onder mijn neus",
                            new Zintuig("smaak","proeven")),
                new Hand("linker hand","aan mijn pols",
                            new Zintuig("tast","voelen")),
                new Hand("rechter hand","aan mijn pols",
                            new Zintuig("tast","voelen")),  
        };
        
        for (int i = 0; i < lichaamsdelen.length; i++) {
            if (lichaamsdelen[i] instanceof Oog) {
                ((Oog)lichaamsdelen[i]).output();
            }
            else{
                if (lichaamsdelen[i] instanceof Oor) {
                    ((Oor)lichaamsdelen[i]).output();
                }
                else{
                    if (lichaamsdelen[i] instanceof Neus) {
                        ((Neus)lichaamsdelen[i]).output();
                    }
                    else{
                        if (lichaamsdelen[i] instanceof Mond) {
                            ((Mond)lichaamsdelen[i]).output();
                        }
                        else{
                            ((Hand)lichaamsdelen[i]).output();
                        }
                    }
                }
            }
        }
    }

}



als output geeft ie:
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
Mijn rechter hand bevindt zich aan mijn pols.
    De iris van mijnrechter hand heeft deze kleur: java.awt.Color[r=0,g=0,b=255].
Met mijn rechter hand kan ik knipperen.
Als zintuig heb ik tast waardoor ik kan voelen.

Mijn rechter hand bevindt zich aan mijn pols.
    De iris van mijnrechter hand heeft deze kleur: java.awt.Color[r=0,g=0,b=255].
Met mijn rechter hand kan ik knipperen.
Als zintuig heb ik tast waardoor ik kan voelen.

Mijn rechter hand bevindt zich aan mijn pols.
Met mijn rechter hand kan ik flapperen.
Als zintuig heb ik tast waardoor ik kan voelen.

Mijn rechter hand bevindt zich aan mijn pols.
Met mijn rechter hand kan ik flapperen.
Als zintuig heb ik tast waardoor ik kan voelen.

Mijn rechter hand bevindt zich aan mijn pols.
Met mijn rechter hand kan ik niezen.
Als zintuig heb ik tast waardoor ik kan voelen.

Mijn rechter hand bevindt zich aan mijn pols.
Met mijn rechter hand kan ik pruilen.
Als zintuig heb ik tast waardoor ik kan voelen.

Mijn rechter hand bevindt zich aan mijn pols.
Met mijn rechter hand kan ik zwaaien.
Als zintuig heb ik tast waardoor ik kan voelen.

Mijn rechter hand bevindt zich aan mijn pols.
Met mijn rechter hand kan ik zwaaien.
Als zintuig heb ik tast waardoor ik kan voelen.



terwijl het zoiets zou moeten zijn:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Mijn linker oog bevindt zich in mijn oogkas.
De iris van mijn linker oog heeft deze kleur: java.awt.Color
[r=0,g=0,b=255].
Met mijn linker oog kan ik knipperen.
Als zintuig heb ik zicht waardoor ik kan zien.

Mijn rechter oog bevindt zich in mijn oogkas.
De iris van mijn rechter oog heeft deze kleur: java.awt.Color
[r=0,g=0,b=255].
Met mijn rechter oog kan ik knipperen.
Als zintuig heb ik zicht waardoor ik kan zien.

Mijn linker oor bevindt zich aan de zijkant van mijn hoofd.
Met mijn linker oor kan ik flapperen.
Als zintuig heb ik gehoor waardoor ik kan horen.

Mijn rechter oor bevindt zich aan de zijkant van mijn hoofd.
Met mijn rechter oor kan ik flapperen.
Als zintuig heb ik gehoor waardoor ik kan horen.
...

Dus nog eens men vraag, iemand tips of aanwijzingen hoe ik dit kan verbeteren

Acties:
  • 0 Henk 'm!

  • momania
  • Registratie: Mei 2000
  • Laatst online: 21:15

momania

iPhone 30! Bam!

Verwijderd schreef op maandag 02 februari 2009 @ 19:25:

Dus nog eens menmijn vraag, iemand tips of aanwijzingen hoe ik dit kan verbeteren
Zoek eens op eens wat static betekend ;)

Neem je whisky mee, is het te weinig... *zucht*


Acties:
  • 0 Henk 'm!

Verwijderd

With stupid...static gebruiken voor al je datavelden is een beetje heel het principe van Objecten overboord gooien...en dan krijg je inderdaad dit soort resultaten.

Acties:
  • 0 Henk 'm!

  • Kwistnix
  • Registratie: Juni 2001
  • Laatst online: 23-09 16:29
Weet je wat de static modifier impliceert die je overal aan je variabelen toekent? :)

[ Voor 0% gewijzigd door Kwistnix op 02-02-2009 19:31 . Reden: Spuit11 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Goed, dan ga ik eens verder opzoeken wat en hoe juist met die static, in ieder geval al bedankt om me op weg te helpen.

Acties:
  • 0 Henk 'm!

  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Wanneer je een klasse variabele static declareert, dan gelden ze voor álle instanties van de klasse. Dus elke keer als je die toewijst cq verandert, dan heeft dit gevolgen voor álle instanties van de klasse. Dit wil je hier dus niet hebben. Verwijder die modifier en gebruik die pas zodra je het echt nodig hebt.

Acties:
  • 0 Henk 'm!

  • 2playgames
  • Registratie: Februari 2005
  • Laatst online: 01-06 15:19
Deze code is technisch gezien niet fout, maar kan zo veel korter:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
for (int i = 0; i < lichaamsdelen.length; i++) {
            if (lichaamsdelen[i] instanceof Oog) {
                ((Oog)lichaamsdelen[i]).output();
            }
            else{
                if (lichaamsdelen[i] instanceof Oor) {
                    ((Oor)lichaamsdelen[i]).output();
                }
                else{
                    if (lichaamsdelen[i] instanceof Neus) {
                        ((Neus)lichaamsdelen[i]).output();
                    }
                    else{
                        if (lichaamsdelen[i] instanceof Mond) {
                            ((Mond)lichaamsdelen[i]).output();
                        }
                        else{
                            ((Hand)lichaamsdelen[i]).output();
                        }
                    }
                }
            }
        }


Hoe en waarom? Dat laat ik aan jou over ;)

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ all: bedankt voor de tips over het verkeerd gebruik van de static modifier. Heb net nog even opgezocht en idd daar zit de fout. Heb even wat nagelezen over het gebruik en het waarom van de static in Bruce Eckel's mindView on-line boek. Hierdoor zie ik nu zelf ook in dat ik die static in dit geval helemaal niet moest gebruiken. Is enkel nodig als de variabele hetzelfde is voor alle instanties van de klasse.
Ik heb het programma nu aangepast en het werkt zoals het moet, dus bedankt voor de hulp!

@2playgames:
kan idd korter en heb ik nu ook aangepast naar het volgende:
code:
1
2
3
for (int i = 0; i < lichaamsdelen.length; i++) {
            lichaamsdelen[i].output();
        }
beter?

Acties:
  • 0 Henk 'm!

Verwijderd

Inderdaad beter, maar weet je ook waarom het werkt?

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
In de eerste versie was ik steeds aan het testen van welke type het object is en het daarna aan het casten. Dit is overbodig aangezien ik tracht met polymorfie te werken.
Doordat de methode output in iedere klasse aanwezig is zal het object automatische de juiste versie van de output methode aanroepen. Dit is als ik het goed begrijp net de kracht van polymorfie?

Acties:
  • 0 Henk 'm!

  • 2playgames
  • Registratie: Februari 2005
  • Laatst online: 01-06 15:19
Goedzo. :) Als beloning krijg je het volgende cadeau:

Java:
1
2
3
for (int i = 0; i < lichaamsdelen.length; i++) {
            lichaamsdelen[i].output();
        }


kan nog korter als

Java:
1
2
3
for (Lichaamsdeel ld : lichaamsdelen) {
            ld.output();
        }

Acties:
  • 0 Henk 'm!

Verwijderd

Klopt inderdaad, en dat noemen ze als het goed is Dynamic Binding op school.

edit: ja niet over de for lus nee ....

[ Voor 21% gewijzigd door Verwijderd op 02-02-2009 21:03 ]


Acties:
  • 0 Henk 'm!

  • 2playgames
  • Registratie: Februari 2005
  • Laatst online: 01-06 15:19
Dynamic Binding? Ik noem dat gewoon een foreach :P

Je hebt het zeker over de post voor mij 8)7

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
@ Esotériques: idd Dynamic Binding of late binding zijn de termen die we daarvoor moeten gebruiken. En die ik dankzij jullie nu ook begin te snappen! Helemaal top en nogmaals bedankt voor de hulp.

@2playgames: de foreach loop had ik nog niet leren gebruiken, maar heb het even opgezocht en is best handig zo. Bedankt voor de tip.

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:37

Creepy

Tactical Espionage Splatterer

Niet om het 1 of ander maar wil je de volgende keer aub alleen relevante code posten i.p.v. deze enorme lap? Het is niet de bedoeling om je code te dumpen en alleen maar aan te geven wat er mis gaat maar dat is precies wat je nu doet.

Ook je topictitel zegt helemaal niks natuurlijk. In *** Over topictitels in PRG - lezen voor topic openen!!! *** staat uitgelegd hoe we een topictitel willen zien. Als je PRG Beleid ook even bekijken dan zie je gelijk wat voor topics hier wel kunnen.

Het is hier in de eerste plaats een forum, geen helpdesk ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
excuses daarvoor, zal volgende keer er beter opletten.

Acties:
  • 0 Henk 'm!

Verwijderd

@Creepy: Ik ga met je mee, maar..

Als whielie niet zijn hele code gepost had, had niemand de static gezien en nee dit is geen helpdesk, maar een forum waar mensen vragen kunnen stellen. Als dit niet kan, dan kunnen de rest van de vragen in PRG ook helaas niet.

No offense,
- Dirk

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21:37

Creepy

Tactical Espionage Splatterer

offtopic:
dirkmay: commentaar op moderaties e.d. kunnen in Feedback op moderatie binnen de Devschuur.
Vragen om hulp is geen probleem. Dat doen zonder zelf echt inzet te tonen is dat wel ;) Als je het daar niet mee eens bent raad ik je aan om de registratievoorwaarden waar je tijdens registratie mee akkoord bent gegaan nog eens door te lezen. Kijk dan ook gelijk even naar het stukje over groeten doen e.d.
En ontopic maar weer.....

[ Voor 7% gewijzigd door Creepy op 03-02-2009 16:51 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1