[java] array afleveren

Pagina: 1
Acties:

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

TheNameless

Jazzballet is vet!

Topicstarter
ik wil in een methode een array vullen met een for-loop en daarna de array afleveren, zodat ik het kan gebruiken in een andere methode in een andere klassen.
code:
1
2
3
4
5
6
7
8
int[] vulkaartenRij(int [] kaartenRij)
  {
    for (int i=0;i<kaartenRij.length; i++)
    {
    kaartenRij[i]=i+1;
    }
    return kaartenRij[];
  }

ik dacht misschien zo, maar dat werkt niet.
iemand een idee?

Ducati: making mechanics out of riders since 1946


  • chem
  • Registratie: Oktober 2000
  • Laatst online: 27-08 13:53

chem

Reist de wereld rond

over welke taal hebben we het?

Klaar voor een nieuwe uitdaging.


  • FireFoz
  • Registratie: Juni 2001
  • Laatst online: 31-08 23:38
[bijdehand mode]
ik denk grieks
[/bijdehand mode]

Leef lekker in het nu, er is niks anders


  • BierPul
  • Registratie: Juni 2001
  • Laatst online: 16-09 18:33

BierPul

2 koffie graag

Op woensdag 17 oktober 2001 10:56 schreef FireFoz het volgende:
[bijdehand mode]
ik denk grieks
[/bijdehand mode]
:D

Ja man


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Java

return kaartenRij (zonder []) zou denk ik moeten werken...

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


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

drm

f0pc0dert

hmm. ziet eruit als Java :?

melp

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


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op woensdag 17 oktober 2001 10:42 schreef MayaFreak het volgende:

ik dacht misschien zo, maar dat werkt niet.
iemand een idee?
Geef voortaan de foutmelding.
Nu is dit niet zo'n moeilijke error maar toch.

mbravenboer heeft het antwoord al gegeven..

Verwijderd

Of maak kaartenRij[] gewoon public...

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
minne: Of maak kaartenRij[] gewoon public...
foei ;)

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
Op woensdag 17 oktober 2001 10:59 schreef mbravenboer het volgende:
Java

return kaartenRij (zonder []) zou denk ik moeten werken...
thnx
hoe kan ik nu de return waarde gebruiken in andere methode?

Ducati: making mechanics out of riders since 1946


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

drm

f0pc0dert

ligt er aan wat je ermee wilt ;)
code:
1
2
3
4
5
6
int [] result = new int [ aantal ];

result = vulkaartenRij ( andereArray );

for ( int a = 0; a < result.length; a++ )
   System.out.println ( a );

toch :?


* drm heeft al een tijdje geen java meer gedaan...

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


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Op woensdag 17 oktober 2001 14:03 schreef MayaFreak het volgende:

[..]

thnx
hoe kan ik nu de return waarde gebruiken in andere methode?
door hem mee te geven aan die andere methode..

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

TheNameless

Jazzballet is vet!

Topicstarter
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
package memory;

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

public class Applet1 extends Applet
{
  int invoer = 20;
  TextField invoerveld;
  Button knopDeel;
  Label beschr;
  Spel spel= new Spel(invoer);

  public void init()
  {
    beschr = new Label("Vul hier het aantal paren in (1 tm 20)");
    invoerveld = new TextField("Hier intikken svp");
    knopDeel = new Button("Deel");
    add (beschr);
    add (invoerveld);
    add (knopDeel);
  }
  public void paint(Graphics g)
  {
    spel.tekenveld(g,invoer);
    spel.resetWaarden();
  }
  public boolean action(Event e,Object o)
  {
    if(e.target  == knopDeel)
    {
    repaint();
    return true;
    }
    return false;
  }
}
class Kaarten
{
  int invoer;
  int[] kaartenRij;

  Kaarten(int invoer)
  {
    this.invoer = invoer;
    System.out.println(invoer); //levert 0!!!!
    kaartenRij = new int[invoer];
  }
  int[] vulkaartenRij()
  {
    for (int i=0;i<kaartenRij.length; i++)
    {
    kaartenRij[i]=i+1;
    }
    return kaartenRij;
  }
}
class Spel
{
  int invoer;
  int xpos,ypos;
  int getal;
  int[] dumpRij;
  int[] volkaartenRij;
  Kaarten k = new Kaarten(invoer);

  Spel(int invoer)
  {
    this.invoer = invoer;
    System.out.println(invoer); //levert 20
  }
 /**
  * pakt een willekeurig getal uit volkaartenRij[]
  * en tekent een kaart en herhaald dat
 */
  public void tekenveld(Graphics g, int invoer)
  {
    volkaartenRij = k.vulkaartenRij();
    for(int i=0;i<volkaartenRij.length;i++)
    {
    volkaartenRij[(int) ((this.invoer-1)* Math.random())] = getal;
    g.drawString(""+getal,xpos+10,ypos+20);
    g.drawRect(xpos,ypos,30,30);
    xpos += 30;
    }
  }
  void resetWaarden()
  {
    xpos =0;
    ypos = 90;
  }
}

Waarom levert de eerste System.out.prinln(invoer) 0?

Ducati: making mechanics out of riders since 1946


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Een erg interressante en goede vraag :D
code:
1
2
3
4
5
6
7
public class Applet1 extends Applet
{
  int invoer = 20;
  TextField invoerveld;
  Button knopDeel;
  Label beschr;
  Spel spel= new Spel(invoer);

Dit is het initialiseren van variabelen. Dit wordt gedaan op het moment dat de klass wordt aangemaakt. Bij bovenstaande code zou je dus verwachten dat invoer de waarde 20 heeft.. maar..
de compiler kan en mag de volgorde van deze regels omdraaiien. hij mag dus bijvoorbeeld eerst alle variabelen aanmaken en ze dan pas van waarde voorzien.

Dit verklaard waarom invoer o kan zijn

stel dat hij er de volgende regels van maakt:
code:
1
2
3
4
5
public class Applet1 extends Applet
{
  int invoer;
  Spel spel= new Spel(invoer);
  invoer = 20;

Dit is volkomen legaal, invoer krijgt de waarde 0 bij initialisatie. Daar word een nieuw spel mee aangemaakt. En dan wordt de waarde van invoer op 20 gezet.

(let op dit geld alleen bij ingebouwde typen)

Dit wetende moet je dus zorgen dat je van deze volgorde nooit afhankelijk bent.

Dus moet je wachten met het aanmaken van Spel tot je zeker weet dat invoer de juiste waarde heeft:
code:
1
2
3
4
5
6
7
8
9
10
11
12
public class Applet1 extends Applet
{
  int invoer = 20;
  TextField invoerveld;
  Button knopDeel;
  Label beschr;
  Spel spel;

  public void init()
  {
    spel = new Spel(invoer);
    beschr = new Label("Vul hier het aantal paren in (1 tm 20)");

edit:
bij nader inzien klinkt het verhaal van mbravenboer logischer :)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MayaFreak:
code:
1
2
3
4
5
6
7
8
9
10
class Spel
{
  int invoer;
  ...
  Kaarten k = new Kaarten(invoer);

  Spel(int invoer)
  {
    this.invoer = invoer;
  }
De instantie variabele invoer krijgt een waarde op het moment dat de constructor wordt aangeroepen. Voordat de de constructor wordt aangeroepen worden echter al de declaraties in je klasse verwerkt. De variabele invoer heeft als beginwaarde dus 0. Met de waarde wordt ook het object Kaarten aangemaakt die opgeslagen wordt in de variabele k. Daarna wordt pas de invoer variabele ingesteld in de constructor.

In het algemeen is het onverstandig en onduidelijk om instantie variabelen gelijk bij hun declaratie in de klasse een waarde te geven. Doe dat liever in de constructor :) .

edit: hum we waren tegelijk bezig ;)

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


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
wasigh: Dit is het initialiseren van variabelen. Dit wordt gedaan op het moment dat de klass wordt aangemaakt. Bij bovenstaande code zou je dus verwachten dat invoer de waarde 20 heeft.. maar..
de compiler kan en mag de volgorde van deze regels omdraaiien. hij mag dus bijvoorbeeld eerst alle variabelen aanmaken en ze dan pas van waarde voorzien.

Dit verklaard waarom invoer o kan zijn
Ook dit geeft alweer aan dat het gewoon erg onhandig en onduidelijk is om variabelen al bij de declaratie in de klasse gelijk te initialiseren. Doe dit gewoon in de constructor, daar zijn ze voor :) .
Dus moet je wachten met het aanmaken van Spel tot je zeker weet dat invoer de juiste waarde heeft
We zijn het eens ;)

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
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
package memory;

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

public class Applet1 extends Applet
{
  int invoer;
  TextField invoerveld;
  Button knopDeel;
  Label beschr;
  Spel spel;

  public void init()
  {
    spel= new Spel(invoer);
    beschr = new Label("Vul hier het aantal paren in (1 tm 20)");
    invoerveld = new TextField("Hier intikken svp");
    knopDeel = new Button("Deel");
    add (beschr);
    add (invoerveld);
    add (knopDeel);
  }
  public void paint(Graphics g)
  {
    spel.tekenveld(g,invoer);
    spel.resetWaarden();
  }
  public boolean action(Event e,Object o)
  {
    if(e.target  == knopDeel)
    {
    invoer = Integer.parseInt(invoerveld.getText());
    repaint();
    return true;
    }
    return false;
  }
}
class Kaarten
{
  int invoer;
  int[] kaartenRij;

  Kaarten(int invoer)
  {
    this.invoer = invoer;
    System.out.println(invoer); //levert 0!!!!
    kaartenRij = new int[invoer];
  }
  /**
   * vult de array met de waarden 1- max 20
   */
  int[] vulkaartenRij()
  {
    for (int i=0;i<kaartenRij.length; i++)
    {
    kaartenRij[i]=i+1;
    }
    return kaartenRij;
  }
}
class Spel
{
  int invoer;
  int xpos,ypos;
  int getal;
  int[] dumpRij; //om te checken welke getallen er al getekend zijn
  int[] volkaartenRij;
  Kaarten k = new Kaarten(invoer);

  Spel(int invoer)
  {
    this.invoer = invoer;
    System.out.println(invoer); //levert 20
  }
 /**
  * pakt een willekeurig getal uit veld[]
  * en tekent een kaart en herhaald dat
 */
  public void tekenveld(Graphics g, int invoer)
  {
    volkaartenRij = k.vulkaartenRij(); //volkaaartenRij wordt de returnwaarde kaartenRij
    for(int i=0;i<volkaartenRij.length;i++)
    {
    volkaartenRij[(int) ((this.invoer-1)* Math.random())] = getal;
    g.drawString(""+getal,xpos+10,ypos+20);
    g.drawRect(xpos,ypos,30,30);
    xpos += 30;
    }
  }
  void resetWaarden()
  {
    xpos =0;
    ypos = 90;
  }
}

(Ik heb alleen wat verandert in boolean action)
Nu geven beide System.out.println 0 (dat is logisch!), maar als je via het textvak (bijvoorbeeld) 5 invuld blijven de beide op 0 staan

Ducati: making mechanics out of riders since 1946


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Ik zie zo niet wat je precies probeert te doen en waar het mis gaat...

Wel een paar tips:

1. Gebruik geen public boolean action(bla) want dat is heel erg deprecated. De goede manier om akies af te vangen is via een ActionListener. Je moet een ActionListener implementeren voor die knop en daarna aanmelden op de knop. Je events komen dan binnen via de methode actionPerformed.

2. Die variabele invoer is op heel veel plekken te vinden en wordt zelfs ook nog op een aantal plaatsen als parameter meegegeven. Dat werkt erg verwarrend en zorgt snel voor fouten. Probeer eens of je de status van je spel niet in een model (1 of meer klassen) kan representeren. Dat is een stuk makkelijker en de code wordt duidelijker.

3. Probeer het aantal instantie-variabelen te beperken. Je hebt vrij veel variabelen in de klassen zelf gedefinieerd.

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


  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

opmerkingen in het algemeen:

> maak variabelen private en gebruik getters en setters
> kies logische namen niet k
> geef je class een duidelijke naam en niet Applet1
> gebruikt voor action's een actionHandler en geen deprecated methode
code:
1
2
3
4
5
6
7
8
9
10
public void tekenveld(Graphics g, int invoer)
  {
    volkaartenRij = k.vulkaartenRij(); //volkaaartenRij wordt de returnwaarde kaartenRij
    for(int i=0;i<volkaartenRij.length;i++)
    {
    volkaartenRij[(int) ((this.invoer-1)* Math.random())] = getal;
    g.drawString(""+getal,xpos+10,ypos+20);
    g.drawRect(xpos,ypos,30,30);
    xpos += 30;
    }

tuurlijk blijft invoer van spel op 0 staan je wijzigd hem toch ook niet?

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

TheNameless

Jazzballet is vet!

Topicstarter
Ik heb hem werkende!

Bedankt voor de tips, en wat betreft boolean action: dat moeten we gebruiken van de school! ;(

Maar hij ziet er voor de rest wel goed uit?

Ducati: making mechanics out of riders since 1946


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
MayaFreak: Ik heb hem werkende!
Mooi :)
Bedankt voor de tips, en wat betreft boolean action: dat moeten we gebruiken van de school! ;(
Hum.... ach, het is pas 3 jaar deprecated :( .
Maar hij ziet er voor de rest wel goed uit?
Het is nog een behoorlijke brei, waardoor het programmeren juist erg lastig gaat... Als je OO echt goed te pakken gaat krijgen (dat zal vast wel komen :) ) dan wordt het allemaal een stuk eenvoudiger en zou je dit inzichtelijker kunnen oplossen... Voorlopig voldoet het wel :) . Ik wil je niet teleurstellen, maar over een jaar of 2 wil je deze code niet meer zien ;) .

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

Pagina: 1