Toon posts:

[Java] Uitlezen samengesteld object uit vector

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een klasse maken met meerdere gegevens er in en objecten van deze klasse opslaan in een vector. Het lukt me echter niet om ze weer uit te lezen. Zal vast iets over het hoofd zien, maar heb echt geen idee meer wat...

Simpel voorbeeld:
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
private Vector Gegevens;
 Info Stuff;
 String Naampje;

 public void init(){
     Naampje = "Beer";
     Stuff = new Info("AIM",1);
     Gegevens = new Vector();
    
    Gegevens.addElement(Stuff);
    Gegevens.addElement(Naampje);
    
     
 }
 
 public void paint (Graphics g){
 g.drawString(Gegevens.elementAt(0).toString(),10,10); //Hier wil ik eigenlijk de oorspronkelijke waarden afdrukken
 }
 
}

class Info{
String Naam;
int Nummer;    

public Info(String Naam, int Nummer){
this.Naam = Naam;
this.Nummer = Nummer;
}

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

Alarmnummer

-= Tja =-

Je krijgt een object terug uit die vector. Dat moet je casten naar je eigen class.

Bla bla = (Bla)vector.get(0);

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

++?????++ Out of Cheese Error

Je "weet" niet zeker wat je terug krijgt uit je vector. Je stopt er een String en een Info in. Wil je toch op een manier deze Objecten op dezelfde manier aanspreken, zou je een toString functie kunnen implementeren in je Info object. Dan wordt deze gebruikt bij het afdrukken van het Object.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Verwijderd

Topicstarter
Die string heb ik alleen maar even toegevoegd om te controleren of die wel goed terugkomt uit de vector.

In principe gaan er alleen maar objecten van hert type info in.

Maar dan krijg ik als weergave: blok2.info@80d1ff ipv de string AIM en het getal 1.

  • Michali
  • Registratie: Juli 2002
  • Laatst online: 22-03 18:12
Dat is hoe de definitie van toString in Object is. Dat kun je hier ook zien.

Je zou dan de method moeten overriden in je Info class.

Noushka's Magnificent Dream | Unity


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Plaats van volgende method ook even in je Info class:
Java:
1
2
3
public String toString() {
    return Naam+", "+Nummer;
}

Verwijderd

Topicstarter
Krijg nu idd een string terug met mijn originele gegevens :D

Maar is het ook nog mogelijk om de aparte waarden te benaderen. Deze dus rechtstreeks uit de vector gebruiken in je programma. Of kan dit niet bij samengestelde objecten?

  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Kan wel, maar dan moet je ze expliciet terug casten naar het type dat ze zijn. Alle objecten die je in een vector stopt, worden allemaal aanzien als Object.

  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 23:15
Je kunt gebruik maken van instanceof om te achterhalen of je een String-object of een Info-object hebt, maar of dit nou zo netjes is... Als ik jou was zou ik voorkomen om verschillende typen objecten in een lijst te gooien.

* JeroenTheStig moet beter lezen :X
Verwijderd schreef op woensdag 24 augustus 2005 @ 17:07:
Krijg nu idd een string terug met mijn originele gegevens :D

Maar is het ook nog mogelijk om de aparte waarden te benaderen. Deze dus rechtstreeks uit de vector gebruiken in je programma. Of kan dit niet bij samengestelde objecten?
Dit is ook al eerder in je topic gezegd, maar je moet je objecten casten naar een Info-object:

Info info = (Info)vector.get(0);
info.setName("Blaat");

[ Voor 59% gewijzigd door JeroenTheStig op 24-08-2005 17:31 ]


  • Daos
  • Registratie: Oktober 2004
  • Niet online
Je kan twee vectors maken: 1 voor naam en 1 voor info.

Of je maakt een speciaal object:
Java:
1
2
3
4
5
6
7
8
public class InfoMetNaampje{
Info Stuff;
String Naampje;

public InfoMetNaampje(Info Stuff, String Naampje){
  this.Stuff = Stuff;
  this.Naampje = Naampje;
}

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Verwijderd schreef op woensdag 24 augustus 2005 @ 16:28:
Ik wil een klasse maken met meerdere gegevens er in en objecten van deze klasse opslaan in een vector. Het lukt me echter niet om ze weer uit te lezen. Zal vast iets over het hoofd zien, maar heb echt geen idee meer wat...

Simpel voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
private Vector Gegevens;
 Info Stuff;
 String Naampje;

 public void init(){
     Naampje = "Beer";
     Stuff = new Info("AIM",1);
     Gegevens = new Vector();
    
    Gegevens.addElement(Stuff);
    Gegevens.addElement(Naampje);     
 }
Als je je variabelen al als members gedefineerd heb hoezo wil je ze dan ook nog eens in een Vector stoppen?

“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.”


  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 01-05 18:17
Je moet je klasse Info wel methoden geven om de naam en het nummer weer uit te lezen, anders zal het niet lukken ze apart uit te lezen (tenzij je ze public maakt, maar dat terzijde). Dus iets als:

Java:
1
2
3
4
5
6
7
public String getNaam() {
  return this.Naam;
}

public int getNummer() {
  return Nummer;
}


Dan kan je de gegevens apart uit je klasse halen. Wil je ze weergeven dan kan je iets doen als:

Java:
1
g.drawString(((Info)Gegevens.elementAt(0)).getNaam(),10,10);


Maar dit is eigenlijk wel basiskennis hoor.

Verwijderd

Topicstarter
Sorry als het basiskennis is...

Ben nu 3 daagjes bezig met Java, vind eigenlijk zelf dat ik al wel redelijk wat heb opgepikt, maar kreeg dit niet voor elkaar.

Wil soms mss te veel net als in pascal doen, of mss gewoon te veel. :)

Bedankt voor de hulp in ieder geval allemaal. Ga morgen weer eens verder spelen.

  • The Fox NL
  • Registratie: Oktober 2004
  • Laatst online: 01-05 18:17
Je moet het een keer leren nietwaar :P Maar misschien moet je eens een boek pakken van Java, dan leer je snel de beginselen.

Verwijderd

Topicstarter
Heb een boek...

En dan is er... Java

Staat alleen niets in over vectoren :(

Verwijderd

Je kunt ook even in de api specification kijken. Daar staat Vector beschreven.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Volgens mij kan je trouwens ook beter gebruik maken van ArrayList als vector. Vector was er dacht ik alleen nog maar om backwards compatible te blijven in de API.

“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.”


  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 22-04 03:55

Nick_S

++?????++ Out of Cheese Error

Je kan inderdaad beter ArrayList gebruiken. Deze komt uit de Collections framework. Dan kun je later makkelijker een andere implementatie van List gebruiken.

Dus:
code:
1
List infoThings = new ArrayList();


En aangezien je een collectie meestal maar een keer instantieerd kun je er ook nog final voor zetten en aangezien het een membervariable is, waar de buitenwereld niks mee te maken heeft, is je Collection ook nog private. Maar dat zijn denk leuke dingen voor na je lessen. ;)

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • -FoX-
  • Registratie: Januari 2002
  • Niet online

-FoX-

Carpe Diem!

Een Vector is ook een List hoor...
Het enige verschil tussen een Vector en een ArrayList, is dat de Vector synchronized (dus threadsafe) is.

Maar in jouw geval kan je wel beter een ArrayList gebruiken.

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
-FoX- schreef op donderdag 25 augustus 2005 @ 13:49:
Een Vector is ook een List hoor...
Het enige verschil tussen een Vector en een ArrayList, is dat de Vector synchronized (dus threadsafe) is.

Maar in jouw geval kan je wel beter een ArrayList gebruiken.
Een ArrayList is ook perfect Synchronized te maken hoor.
code:
1
List list = Collections.synchronizedList(new ArrayList(...));

“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: 01-05 21:33

.oisyn

Moderator Devschuur®

Demotivational Speaker

Kleine subtiliteit: dan maak je 'm niet synchronizer maar maak je er een synchronized wrapper omheen. In jouw voorbeeld maakt het niet zoveel uit (alleen de wrapper heeft een referentie naar de implementatie), maar als je een ArrayList ergens anders vandaan krijgt en je maakt er zelf een synchronized list omheen, dan is er nog altijd de mogelijkheid tot niet gesynchroniseerde access.

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.

Pagina: 1