[Java] Objecten wisselen tussen Vectors

Pagina: 1
Acties:

  • Machiel21
  • Registratie: September 2001
  • Laatst online: 08-02-2024
Voor mijn programma gebruik 2 Vectors (in klasse Schuif en Speelveld). In deze Vectors staan objecten van de klasse Steen (Een canvas, vierkantje met achtergrond).

Hoe kan ik een object Steen in Vector Speelveld verplaatsen naar Vector Schuif en deze vervangen voor de eerste object Steen in Vector Schuif en de vervangende object Steen komt op de plaats van object Steen in Vector Speelveld.

Vector Speelveld Vector Schuif
+-----+ +-----+
| | Steen | |
| | <----------> | |
| | | |
+-----+ +-----+

Of kan ik beter wat anders gebruiken dan Vectors? bv ArrayList???

Hoop dat het een beetje duidelijk is :? bij voorbaat dank

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

Alarmnummer

-= Tja =-

Steen steen1 = speelveld.remove(0);
Steen steen2 = schuif.remove(0);
speelveld.add(steen2,0);
schuif.add(steen1,0);

en verder is er eigelijk geen verschil tussen een vector en een arraylist. Het zijn liststructuren en het verschil is dat de vector gesynchroniseerd is (in noob termen.. hij kan beter tegen threads).

En verder zou ik niet vanaf andere classes je systeem op gaan zetten. Je bent dan ook verantwoordelijk voor die methodes. Je kan beter dit doen:

Java:
1
2
3
4
5
6
7
8
9
class Speelveld{
     private List _steenList = new ArrayList();

     public int size(){return _steenList.size();}

     public Steen get(int index){return (Steen)_steenList.get(index);}

     public  Steen remove(int index){return (Steen)_steenList.remove(index);}
}


Hierdoor heb je veel betere controle over de methodes die je aanbiedt.

[ Voor 49% gewijzigd door Alarmnummer op 25-01-2003 12:33 ]


  • Machiel21
  • Registratie: September 2001
  • Laatst online: 08-02-2024
Hier is wat code.
Hier wil ik 2 stenen van plaats verwisselen, maar als ik de methode verPlaatsSteen() aanroep hangt mijn programma :?

Hoe moet het wel?
bvd

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
import java.awt.*;
import java.util.*;

public class Speelveld extends Panel
{
    //private Steen[][] veld;
    //private Vector veldX = new Vector(5);
    private ArrayList veldX = new ArrayList(5);
    
    private Color[] kleuren = { Color.blue,
                                Color.yellow,
                                Color.pink,
                                Color.cyan,
                                Color.green,
                                Color.magenta,
                                Color.red,
                                Color.black,
                                Color.black };
    
    public Speelveld()
    {       
        setLayout(null);
        setBackground(Color.black);
        
        for (int a =0; a < 5; a++)
        {
            for (int b = 0; b < 9; b++)
            {           
                //veldX.add(a, new Vector(9));
                veldX.add(a, new ArrayList(9));
            }
        }
            
        for (int a =0; a < 5; a++)
        {
            for (int b = 0; b < 9; b++)
            {           
                //((Vector)veldX.get(a)).add(b, new Steen(kleuren[b]));
                ((ArrayList)veldX.get(a)).add(b, new Steen(kleuren[b]));
            }
        }
        
        maakVeld();
    }
    
    public void maakVeld()
    {
        for (int x = 0; x < 5; x++)
        {
            for (int y = 0; y < 9; y++)
            {               
                //Steen steen = (Steen)((Vector)veldX.get(x)).get(y);
                Steen steen = (Steen)((ArrayList)veldX.get(x)).get(y);
                //steen.setPositie((x * 45) + 10, (y * 45) + 10);
                add(steen);
                
                /*veld[x][y] = new Steen(kleuren[y]);
                veld[x][y].setPositie((x * 45) + 10, (y * 45) + 10);
                add(veld[x][y]);*/
            }
        }
    }
        
    /*public Steen getSteen(int rij)
    {
        return (Steen)((Vector)veldX.get(0)).remove(rij);
    }
    
    public void setSteen(Steen steen, int rij)
    {
        ((Vector)veldX.get(1)).add(rij,steen);
        maakVeld();
    }*/
    
    public void verplaatsStenen()
    {
        //Steen steen1, steen2;
        Steen[] temp = new Steen[2];
        
        temp[0] = (Steen)((Vector)veldX.get(3)).get(7);
        temp[1] = (Steen)((Vector)veldX.get(4)).get(2);
        
        ((Vector)veldX.get(3)).remove(7);
        ((Vector)veldX.get(4)).remove(2);
        
        ((Vector)veldX.get(4)).add(7, temp[1]);
        
        maakVeld();
    }
}

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

Alarmnummer

-= Tja =-

Ik adviseer om even goed de FAQ door te kijken mbt wat gaat fout.

  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Misschien moet je eens proberen de methode clone() te gebruiken, om een kopie van het object te verplaatsen in plaats van het object zelf. Ik heb de code vluchtig doorgekeken en weet niet of dit de bedoeling is, maar ik heb de methode clone() ook wel eens moeten gebruiken om een array om te draaien. Ik hoop dat je er iets aan hebt...

[ Voor 6% gewijzigd door esf op 27-01-2003 22:23 ]

The hardest thing in the world to understand is the income tax. - Albert Einstein


  • Machiel21
  • Registratie: September 2001
  • Laatst online: 08-02-2024
esf schreef op 27 januari 2003 @ 22:22:
Misschien moet je eens proberen de methode clone() te gebruiken, om een kopie van het object te verplaatsen in plaats van het object zelf. Ik heb de code vluchtig doorgekeken en weet niet of dit de bedoeling is, maar ik heb de methode clone() ook wel eens moeten gebruiken om een array om te draaien. Ik hoop dat je er iets aan hebt...
Kloont clone() niet de hele Vector ipv 1 Object in die vector?

Het probleem hier is dus dat ik geen 2 willekeurige stenen van plaats kan laten verwisselen.

  • esf
  • Registratie: Juni 2002
  • Laatst online: 11-03 14:06

esf

Nee, je kan ook de objecten in de vector clonen met behulp van clone().

The hardest thing in the world to understand is the income tax. - Albert Einstein


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Machiel21 schreef op 27 januari 2003 @ 23:05:
Kloont clone() niet de hele Vector ipv 1 Object in die vector?
Zoek het op in de Javadocumentatie ;) Clone() cloned het object waarop je het aanroept.
Let dan wel op dat je steen implements Clonable moet bevatten en clone opener moet definieeren.
Het probleem hier is dus dat ik geen 2 willekeurige stenen van plaats kan laten verwisselen.

Wat denk je met clone() te gaan bereiken? Welk effect denk je dat het heeft? Waarom zou je code nu niet werken? Waarom met clone() wel dan?

Je bent imho maar een beetje bezig met raden :) En geloof me, dat gaat eigenlijk nooit goed :)
Pagina: 1