[JAVA] probje met overerving?

Pagina: 1
Acties:

  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Hier is men code:
-------------------------------

import java.awt.*;
import java.applet.*;

public class Opd1 extends Applet
{
int invoer;
TextField invoerveld;
Button knop1;
Spel spel = new Spel();
Label beschr;

public void init()
{
beschr = new Label("Vul hier het aantal paren in (1 tm 20)");
invoerveld = new TextField("Hier intikken svp");
knop1 = new Button("Deel");
add (beschr);
add (invoerveld);
add (knop1);
}

public void paint(Graphics g)
{
if(invoer <21 && invoer > 0)
{
spel.teken(g);
}
}

public boolean action (Event e, Object o)
{
if(e.target == knop1)
{
invoer = Integer.parseInt(invoerveld.getText());
spel.setWaarden(invoer);
repaint();
}
return false;
}
}


class Spel
{
Kaart k = new Kaart();
int invoer;
int teller ; //telt de rijen
int teller2 ; //telt de paren
int teller3 ; //checkt of er 2x dezelfde kaart ligt
double r1;
int getal ;
int[] getalrij ;

void teken(Graphics g)
{
k.teken(g);
}
/**
* @param g is het scherm waarop getekent wordt
*/

void setWaarden(int invoer)
{
this.invoer = invoer;
getalrij = new int[this.invoer*2]; //vul de array met lengte invoer*2
k.xpos = 0;
k.ypos = 65;
teller = 0;
teller2 = 0;
teller3 = 0;
getal = 0;
}
}
class Kaart extends Spel
{
public int xpos ; //de x positie van de kaart
public int ypos ; //de y positie van de kaart
void teken (Graphics g)
{
for (int i = 0; i<this.invoer*2; i++)
{
r1 = Math.random();
getal = (int) (this.invoer*r1+1);

for (int a = 0; a < (getalrij.length);a++)
{
if (getalrij[a] == getal)
{
teller3++;
}
}
if (!(teller3 == 2))
{
getalrij[i] = getal;
g.drawRect(k.xpos+=35,k.ypos,30,30);
g.drawString(String.valueOf(getalrij[i]),k.xpos+5,k.ypos+15);
teller++;
teller2++;
teller3 = 0;
}
else
{
teller3 = 0;
i = teller2-1;
}
if(teller == 7)
{
teller = 0;
k.ypos+=35;
k.xpos = 0;
}
}
}
}
--------------------------------
En dit is de foutmelding:
-----------------------------
java.lang.StackOverflowError

at Kaart.<init>(Opd1.java:84)

at Spel.<init>(Opd1.java, Compiled Code)

at Kaart.<init>(Opd1.java:84)

at Spel.<init>(Opd1.java, Compiled Code)

at Kaart.<init>(Opd1.java:84)

at Spel.<init>(Opd1.java, Compiled Code)

at Kaart.<init>(Opd1.java:84)

at Spel.<init>(Opd1.java, Compiled Code)

at Opd1.<init>(Opd1.java:19)

at java.lang.Class.newInstance0(Native Method)

at java.lang.Class.newInstance(Class.java:241)

at com.borland.jbuilder.runtime.AppletTestbed.a(Unknown Source)

at com.borland.jbuilder.runtime.AppletTestbed.startApplet(Unknown Source)

at com.borland.jbuilder.runtime.AppletTestbed.main(Unknown Source)

------------------------------
Kan iemand me hier mee helpen?

Ducati: making mechanics out of riders since 1946


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

Alarmnummer

-= Tja =-

een stack overflow error is meestal het gevolg van een eindelose lus. Probeer overal maar een system.out.println("met informatieve tekst") neer te zetten in je for lussen .

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

Alarmnummer

-= Tja =-

Oja.. Regel Je mag nooit!!!!! in een for lus aan een index uit de for lus komen.. (Doe je namelijk met i). Ik denk als je een System.out.println(i) onder de for lus van i neerzet, dat je de hele tijd dezelfde waarde zult zien (of in ieder geval geen waarde waardoor de for lus van i stop).

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

regel 2: zet je code tussen [ code ] tags ;)

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

Alarmnummer

-= Tja =-

en de regelnummers erbij zouden ook erg fijn zijn :)

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

Alarmnummer

-= Tja =-

Op dinsdag 09 oktober 2001 15:01 schreef Alarmnummer het volgende:
Oja.. Regel Je mag nooit!!!!! in een for lus aan een index uit de for lus komen..
Snik snik :'( hoe kunnen er nou goeie programmeurs komen, als ze dit soort basis regels nou niet kennen?

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

regel 3: documenteer je code..

Maar van fouten leer je .. :)

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


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

Alarmnummer

-= Tja =-

Op dinsdag 09 oktober 2001 15:11 schreef im_ik het volgende:
Maar van fouten leer je .. :)
Jep, maar dit zijn dingen die ze niet fout mogen doen, dit had verteld moeten worden in de klas en uiteindelijk moet je dit kunnen dromen. Wre hadden het gisteren al over in een ander topic dat de wijze waarop ze tegenwoordig lesgeven slecht is.

[topic=286596/1/50]

Ze zijn te veel bezig met lastige dingen zoals overerving, applets en graphics, maar elementaire dingen zoals een if statement for lus, while lus, functies/procedure/methoden, recursie etc etc die worden een beetje vergeten.

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

variabele namen zouden veelzeggend moeten zijn.
je moet ze begrijpen zonder dat je het commentaar er omheen moet lezen:
code:
1
2
3
int teller ; //telt de rijen
int teller2 ; //telt de paren
int teller3 ; //checkt of er 2x dezelfde kaart ligt

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

Alarmnummer

-= Tja =-

Op dinsdag 09 oktober 2001 15:21 schreef wasigh het volgende:
variabele namen zouden veelzeggend moeten zijn.
je moet ze begrijpen zonder dat je het commentaar er omheen moet lezen:
code:
1
2
3
int teller ; //telt de rijen
int teller2 ; //telt de paren
int teller3 ; //checkt of er 2x dezelfde kaart ligt
altijd nog beter dan:
code:
1
2
3
int batman;
int superman;
int spiderman;

Heb dit bij een 1e jaars student aangetroffen onder het practicum programmeren :D

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

jep ik heb it gelezen.. :)

Al vindt ik persoonlijk dat je een index wel mag aanpassen
al moet je dan wel weten waarmee je bezig bent..
Doet het regelmatig in ASM maar ni java..daar heb je idd veel mooiere oplossingen voor.

Vraag me idd af waarneer de les-stof weer beter wordt. :(
Ik zelf heb alles nog zelf profondervindelijk uitgevogeldt.

edit: hij mog er ook wel bij zetten wat het had moeten doen.

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


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

Alarmnummer

-= Tja =-

Als je weet hoeveel keer je moet ittereren dan gebruik je een for lus, anders een while (of do while). Als je wil rommelen aan de teller, dan moet je maar een while lus ofzo gebruiken, nooit geen for lus.

  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

je zou je bijna verplicht een basis tut door te laten lezen.
Heb eve gezocht maar kon niet echt een prog-taal onafhanklijke tut vinden. :'(
dit vondt ik wel maar dat is het ook niet.
Gaat wel over Perl maar dat ziet er nu emaal bijna
als pseudo-code uit :)
Ik zoek nog eve verder...

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • im_ik
  • Registratie: November 2000
  • Laatst online: 28-12-2025

im_ik

dat ben ik dus

Dit ziet er ongeveer een beetje naar een goed tut uit...

Atari Terminator AI - LegoBlockX3 = ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.T008ᖟ


  • The - DDD
  • Registratie: Januari 2000
  • Laatst online: 03-09 16:40
Op dinsdag 09 oktober 2001 15:21 schreef wasigh het volgende:
variabele namen zouden veelzeggend moeten zijn.
je moet ze begrijpen zonder dat je het commentaar er omheen moet lezen:
code:
1
2
3
int teller ; //telt de rijen
int teller2 ; //telt de paren
int teller3 ; //checkt of er 2x dezelfde kaart ligt
code:
1
2
3
int iRijTeller ;
int iPaarTeller2 ;
int iDubbeleKaartTeller3 ;

Die i'tjes hoeft niet, maar ik ben nou eenmaal hongaars gewend.

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

Alarmnummer

-= Tja =-

i,k,l zijn wel de standaard tellers :)

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
volgens mij zit de fout in de regel
Kaart k = new Kaart();

omdat je een nieuwe Kaart maakt die ook een Spel is zit je in een eindeloze lus want elk Spel maakt een Kaart aan en die maakt ook een Kaart aan. Zo blijf je bezig en krijg je uiteindelijk een stackoverflow

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
De oplossing is al gegeven, maar als er nog verder over gekletst gaat worden ff de duidelijke code (ok, ik geef het toe. Ik vind de beautifier zo leuk ;) ):
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
import java.awt.*;
import java.applet.*;

public class Opd1 extends Applet
{
    int invoer;
    TextField invoerveld;
    Button knop1;
    Spel spel = new Spel();
    Label beschr;

    public void init()
    {
        beschr = new Label("Vul hier het aantal paren in (1 tm 20)");
        invoerveld = new TextField("Hier intikken svp");
        knop1 = new Button("Deel");
        add (beschr);
        add (invoerveld);
        add (knop1);
    }

    public void paint(Graphics g)
    {
        if (invoer < 21 && invoer > 0)
        {
            spel.teken(g);
        }
    }

    public boolean action (Event e, Object o)
    {
        if (e.target == knop1)
        {
            invoer = Integer.parseInt(invoerveld.getText());
            spel.setWaarden(invoer);
            repaint();
        }
        return false;
    }
}

class Spel
{
    Kaart k = new Kaart();
    int invoer;
    int teller ; //telt de rijen
    int teller2 ; //telt de paren
    int teller3 ; //checkt of er 2x dezelfde kaart ligt
    double r1;
    int getal ;
    int[] getalrij ;

    void teken(Graphics g)
    {
        k.teken(g);
    }
    /**
    * @param g is het scherm waarop getekent wordt
    */

    void setWaarden(int invoer)
    {
        this.invoer = invoer;
        getalrij = new int[this.invoer * 2]; //vul de array met lengte invoer*2
        k.xpos = 0;
        k.ypos = 65;
        teller = 0;
        teller2 = 0;
        teller3 = 0;
        getal = 0;
    }
}
class Kaart extends Spel
{
    public int xpos ; //de x positie van de kaart
    public int ypos ; //de y positie van de kaart
    void teken (Graphics g)
    {
        for (int i = 0; i < this.invoer * 2; i++)
        {
            r1 = Math.random();
            getal = (int)(this.invoer * r1 + 1);

            for (int a = 0; a < (getalrij.length); a++)
            {
                if (getalrij[a] == getal)
                {
                    teller3++;
                }
            }
            if (!(teller3 == 2))
            {
                getalrij[i] = getal;
                g.drawRect(k.xpos += 35, k.ypos, 30, 30);
                g.drawString(String.valueOf(getalrij[i]), k.xpos + 5, k.ypos + 15);
                teller++;
                teller2++;
                teller3 = 0;
            }
            else
            {
                teller3 = 0;
                i = teller2 - 1;
            }
            if (teller == 7)
            {
                teller = 0;
                k.ypos += 35;
                k.xpos = 0;
            }
        }
    }
}

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


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
De uitlijning van de code is gewoon verkeerd gegaan met kopieren en plakken. Ik doe het zo als hier boven.

En wat betreft de index: dat is ons zo geleerd

Ducati: making mechanics out of riders since 1946


  • TimMer
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 09 oktober 2001 15:01 schreef Alarmnummer het volgende:
Oja.. Regel Je mag nooit!!!!! in een for lus aan een index uit de for lus komen.. (Doe je namelijk met i). Ik denk als je een System.out.println(i) onder de for lus van i neerzet, dat je de hele tijd dezelfde waarde zult zien (of in ieder geval geen waarde waardoor de for lus van i stop).
Je bedoelt dus niet de standaard iteratie in Java:
code:
1
2
3
for (int i = 0; i < n; i++) {
doSomething(i);
}

Of wel? Dit is tenminste de manier waarop het ons op school (HHS) wordt uitgelegd.

  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Op dinsdag 09 oktober 2001 20:40 schreef rwb het volgende:
volgens mij zit de fout in de regel
Kaart k = new Kaart();

omdat je een nieuwe Kaart maakt die ook een Spel is zit je in een eindeloze lus want elk Spel maakt een Kaart aan en die maakt ook een Kaart aan. Zo blijf je bezig en krijg je uiteindelijk een stackoverflow
oke dat is de fout, maar hoe kan ik dat dan verhelpen?
dan heb ik niet meer de voordelen van overerving.

Ducati: making mechanics out of riders since 1946


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Nou die regel kan je gewoon weglaten. Want het heeft helemaal geen nut voor spel om een kaart te kennen. De methode teken kan je in dit geval ook weglaten omdat je alleen de teken methode van kaart aanroept en aangezien je hem toch override heeft die methode geen nut

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 08:34

.oisyn

Moderator Devschuur®

Demotivational Speaker

Op woensdag 10 oktober 2001 19:18 schreef rwb het volgende:
Nou die regel kan je gewoon weglaten. Want het heeft helemaal geen nut voor spel om een kaart te kennen. De methode teken kan je in dit geval ook weglaten omdat je alleen de teken methode van kaart aanroept en aangezien je hem toch override heeft die methode geen nut
oh ja laten we het over jouw code maar niet gaan hebben! Jij gaat echt niet meer coden voor ons projectgroepje :P

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • Gert
  • Registratie: Juni 1999
  • Laatst online: 05-12-2025
Willen jullie de opdracht er ook bij? :P
Memory
Het is de bedoeling dat je een spel met opengedraaide memorykaarten tekent.
In de applet moet je in een tekstvlak het aantal gewenste paren kaarten opgeven.(2...20) Bij bv. 14 paren moet je vervolgens na het drukken op de DEEL-knop de 28 kaarten (=14 paren) in een willekeurige volgorde op een zo vierkant mogelijk oppervlak (5*5+1*3) uitleggen.
Iedere keer als je op de DEEL-knop drukt moeten de kaarten in een andere volgorde worden getekend.

Maak in de applet gebruik van twee klassen extra. Het Spel en de Kaarten. In het Spel moet je dus een stapel van maximaal 40 kaarten, of maximaal 20 paren reserveren.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
In deze opdracht hoeft Kaart zowiezo geen subklasse te zijn van Spel volgens mij hoor.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


  • TheNameless
  • Registratie: September 2001
  • Laatst online: 07-02-2025

TheNameless

Jazzballet is vet!

Topicstarter
Kan iemand zijn code ff geven dan?

Ducati: making mechanics out of riders since 1946

Pagina: 1