Toon posts:

[java] Klasse voor objecten array

Pagina: 1
Acties:
  • 193 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Lieve tweakers,

Ik ben bezig met een applet waarmee je persoons gegevens in een array kunt stoppen. Deze array wordt vervolgens in een tekstveld gezet. Met een toString functie.

Ik wil dat elke keer als je een persoon ingevoerd wordt dit een object wordt. En dat dit object in de array wordt begezet.

Ik heb nu een class gemaakt waar de ingevoerde gegevens in een array worden gezet. Voor elk persoon doe ik dus persoon1 = new Persoon("naam","adres","telefoonnummer").

Nu is dus de bedoeling dat persoon1 in een hoofdarray komt, het zelfde voor persoon2 enz.. Elke keer als een persoon wordt toegeveogd moet de array 1 groeter gemaakt worden en het object worden toegeveogd. Ik wil graag een klasse maken die die afhandeld.

Maar ik weet niet waar ik moet beginnen. Want als je een array wilt maken waar objecten inpassen moet je de naam van de klasse hebben waar de objecten naar verwijzen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
class ObjectenArray{
 public void maakArray(){
   //Wat moet ik hier neerzetten om een array te maken waar objecten van Persoon inpassen?
 }
 public void vergrootArray(){
 //hier de code om de array te vergroten (heb ik al)
 }
} 

class Persoon{
 //hier staan de functies in om de gegevens in een array te zetten
}


Ik hoop dat ik een beetje duidelijk ben. Ik vind het moeilijk uit te leggen omdat ik het zelf nog niet kan doorgronden hoe ik precies moet werken met object.

[ Voor 4% gewijzigd door Verwijderd op 08-05-2005 13:07 ]


  • Pinobigbird
  • Registratie: Januari 2002
  • Laatst online: 11:57

Pinobigbird

doesn't share food!

Waarom moeilijk doen met array's? Kijk eens naar de functionaliteiten van een ArrayList.
Dat werkt veel makkelijker.

edit:
Daarnaast denk ik dat je nog wat ernstige fouten maakt met je klassen.
Ten eerste schrijf je in de klasse Persoon dat je daarin de functies hebt staan om een Persoon in een array te zetten. Dat hoort dus juist niet daarin. Gebruik de klasse Persoon enkel en alleen om een object Persoon aan te maken en de eigenschappen ervan te veranderen of op te vragen.

[ Voor 77% gewijzigd door Pinobigbird op 08-05-2005 13:15 ]

Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt


  • Thyzz
  • Registratie: September 2001
  • Laatst online: 29-04 08:30

Thyzz

-=leeg=-

Waarom neem je een Array?
Waarom gebruik je daarn niet een vector voor of een arrayList?, dan hoef je je helemaal geen zorgen te maken over de grote. Die zijn dynamisch
Want om een standaard array te vergroten zul je een nieuwe array moeten aanmaken die 1 groter is, wat betekend dat je 2 array's hebt (onnodig geheugen gebruik, en traag)

Java:
1
2
3
List person = new ArrayList();
//toevoegen is dan heel simple:
person.add(new Person(x,y,z));

[ Voor 16% gewijzigd door Thyzz op 08-05-2005 13:14 ]

5325wp


  • AaroN
  • Registratie: Februari 2001
  • Laatst online: 16-08-2023

AaroN

JayGTeam (213177)

of gebruik een Vector, daarin kun je alles opslaan in de vorm van Object. Dus lekker simpel :)

JayGTeam (213177)


Verwijderd

Topicstarter
Ik wil het op deze manier doen omdat ik graag wil snappen hoe ik op de juiste manier met objecten en klassen moet werken. Ik heb hier het boek "en dan is JAVA". Daar heb ik veel aan. Alleen daar staan kleine stukje code in.

Ik hoopte dat iemand hier op het forum het iets kon verduidelijken voor mij :)

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Verwijderd schreef op zondag 08 mei 2005 @ 13:13:
Ik wil het op deze manier doen omdat ik graag wil snappen hoe ik op de juiste manier met objecten en klassen moet werken. Ik heb hier het boek "en dan is JAVA". Daar heb ik veel aan. Alleen daar staan kleine stukje code in.

Ik hoopte dat iemand hier op het forum het iets kon verduidelijken voor mij :)
Alle klassen in Java zijn voor zover ik weet (ik ben ook maar een Java-n00b :P) afgeleid van java.lang.Object. Misschien dat het werkt als je een array van het type Object maakt, en daar Personen in zet, maar gunstig lijkt me dat niet als je een ArrayList tot je beschikking hebt. :)

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Topicstarter
Pinobigbird schreef op zondag 08 mei 2005 @ 13:08:
Waarom moeilijk doen met array's? Kijk eens naar de functionaliteiten van een ArrayList.
Dat werkt veel makkelijker.

edit:
Daarnaast denk ik dat je nog wat ernstige fouten maakt met je klassen.
Ten eerste schrijf je in de klasse Persoon dat je daarin de functies hebt staan om een Persoon in een array te zetten. Dat hoort dus juist niet daarin. Gebruik de klasse Persoon enkel en alleen om een object Persoon aan te maken en de eigenschappen ervan te veranderen of op te vragen.
Waar moet ik dat dan neerzetten? In een array klasse oid?

PS. Kijk aan dit soort dingen heb ik wat, thnx :)

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 07-05 19:18

Robtimus

me Robtimus no like you

Een array 1 element groter maken:
Java:
1
2
3
Object[] nieuw = new Object[oud.length + 1];
System.arraycopy(oud, 0, nieuw, 0, oud.length);
nieuw[nieuw.length - 1] = object;
Maar zoals al gezegd, gebruik een ArrayList, Vector of LinkedList, daar zijn ze juist voor.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


  • Pinobigbird
  • Registratie: Januari 2002
  • Laatst online: 11:57

Pinobigbird

doesn't share food!

Verwijderd schreef op zondag 08 mei 2005 @ 13:19:
[...]


Waar moet ik dat dan neerzetten? In een array klasse oid?

PS. Kijk aan dit soort dingen heb ik wat, thnx :)
Ok een klein voorbeeldje:
Java:
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
import java.util.ArrayList;

public class PersoonInArrayVoorbeeld {
    public static void main (String args[]) {

        // Voor Java 5.0:
        ArrayList<Persoon> al = new ArrayList<Persoon>();
        // Voor Java 1.4.*:
        // ArrayList al = new ArrayList();

        Persoon keetman = new Persoon ("Keetman", "Sesamstraat 1", "012-3456789");
        al.add(keetman);
    }
}

class Persoon {

    private String naam;
    private String adres;
    private String telnr;

    public Persoon (String naam, String adres, String telnr) {
        this.naam = naam;
        this.adres = adres;
        this.telnr = telnr;
    }

    public String getNaam() {
        return naam;
    }
    // En getters voor adres en telnr
}

edit:
this. toegevoegd

[ Voor 6% gewijzigd door Pinobigbird op 08-05-2005 14:03 ]

Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt


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

Alarmnummer

-= Tja =-

-NMe- schreef op zondag 08 mei 2005 @ 13:18:
[...]

Alle klassen in Java zijn voor zover ik weet (ik ben ook maar een Java-n00b :P) afgeleid van java.lang.Object.
Idd.. Java heeft in tegenstelling tot c++ een object based class hierarchie. Dit is ook meteen de reden waarom templates in c++ belangrijker zijn dan genercis voor java.

Verwijderd

Topicstarter
Iedereen en vooral Pinobigbird bedankt voor jullie antwoorden. Ik ben nu aan het spelen met ArrayList. Maar als ik bijvoorbeeld al.get(1) krijg ik het geheugen adres (AlgemeneGegevens@7808b9) terug, en en niet de waarde die ik in de array heb gestopt.

Hiermee stop ik iets in de array
Java:
1
2
3
4
5
6
7
8
9
10
11
class KnopHandler implements ActionListener{
    public void actionPerformed(ActionEvent e){
      //naam = "";
       
      AlgemeneGegevens temp = new AlgemeneGegevens(""+invoerveldNaam.getText(),"","","");
      al.add(temp);
      repaint();
    }
        
    
  }


Hiermee schrijf ik het naar het scherm
Java:
1
2
3
4
5
6
7
8
public void paint(Graphics g){
    int hoogte;
    for(int i=0;i<al.size();i++){
      hoogte = i*10;
      g.drawString(""+al.get(i),20,50+hoogte);
    }
    
  }


Edit: Laat maar ik ben dom |:( . Ik was een toString functie vergeten te maken :z

[ Voor 17% gewijzigd door Verwijderd op 08-05-2005 16:15 ]


  • Pinobigbird
  • Registratie: Januari 2002
  • Laatst online: 11:57

Pinobigbird

doesn't share food!

Verwijderd schreef op zondag 08 mei 2005 @ 16:02:
Maar als ik bijvoorbeeld al.get(1) krijg ik het geheugen adres (AlgemeneGegevens@7808b9) terug, en en niet de waarde die ik in de array heb gestopt.
Met al.get(1) krijg je een heel object van de klasse AlgemeneGegevens terug.
Wat je wilt is waarschijnlijk de naam oid ?
Je moet dan wel de naam uit dat object halen. Zoals ik in mijn voorbeeld had gezet doe je dat met getters. Dus in de klasse AlgemeneGegevens staat dan een methode
public String getNaam() { return naam; }

Je haalt dan de naam op met
al.get(i).getNaam();


Edit:
Of je maakt idd een toString() :o

[ Voor 4% gewijzigd door Pinobigbird op 08-05-2005 16:21 ]

Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt


Verwijderd

Topicstarter
Ik ben nu zo ver dat ik weer een beetje terug komt om mijn eerste probleem.

Ik heb de volgende methode:
Java:
1
2
3
4
5
6
7
8
9
class TextVeld{
    public void insertArray(){
      for(int i=0;i<al.size();i++){
      //hoogte = i*10;
      personenTextArea.insert(""+al.get(i).toString()+"\n",i);
    }

    }
  }

Maar ik heb meer array's dan alleen maar "al". Het zou dus handig zijn als ik kan doorgeven aan insertArray welke array hij moet uitlezen en in de TextArea.

Maar wat voor type is mijn array? Als ik dat weet kan ik het volgende doen.
Java:
1
2
3
4
5
6
7
8
9
class TextVeld{
    public void insertArray(type naamVanArray){
      for(int i=0;i<naamVanArray.size();i++){
      //hoogte = i*10;
      personenTextArea.insert(""+naamVanArray.get(i).toString()+"\n",i);
    }

    }
  }


Of denk ik nu verkeerd?

  • Borizz
  • Registratie: Maart 2005
  • Laatst online: 02-01 15:55
Pinobigbird schreef op zondag 08 mei 2005 @ 16:20:
[...]

Met al.get(1) krijg je een heel object van de klasse AlgemeneGegevens terug.
Wat je wilt is waarschijnlijk de naam oid ?
Je moet dan wel de naam uit dat object halen. Zoals ik in mijn voorbeeld had gezet doe je dat met getters. Dus in de klasse AlgemeneGegevens staat dan een methode
public String getNaam() { return naam; }

Je haalt dan de naam op met
al.get(i).getNaam();


Edit:
Of je maakt idd een toString() :o
die
al.get(i).getNaam();
gaat niet werken, omdat getNaam() geen methode is van Object.

Je moet het Object eerst casten naar een Persoon object, bijvoorbeeld:

Java:
1
String naam = ((Persoon) al.get(i)).getNaam();


Met een toString methode heb je dit probleem niet, omdat Object die ook kent.

If I can't fix it, it ain't broken.


  • Pinobigbird
  • Registratie: Januari 2002
  • Laatst online: 11:57

Pinobigbird

doesn't share food!

Borizz schreef op zondag 08 mei 2005 @ 16:31:
[...]


die
al.get(i).getNaam();
gaat niet werken, omdat getNaam() geen methode is van Object.

Je moet het Object eerst casten naar een Persoon object, bijvoorbeeld:

Java:
1
String naam = ((Persoon) al.get(i)).getNaam();


Met een toString methode heb je dit probleem niet, omdat Object die ook kent.
Oeps vergeten, met Java 5.0 hier hoeft dat niet meer, maar met eerdere versie idd wel ;)

Joey: Nice try. See the Netherlands is this make believe place where Peter Pan and Tinkerbell come from.
https://kattenoppasleiderdorp.nl
PV: 3080Wp ZO + 3465Wp NW = 6545Wp totaal 13°tilt


  • Robtimus
  • Registratie: November 2002
  • Laatst online: 07-05 19:18

Robtimus

me Robtimus no like you

Verwijderd schreef op zondag 08 mei 2005 @ 16:31:
Ik ben nu zo ver dat ik weer een beetje terug komt om mijn eerste probleem.

Ik heb de volgende methode:
Java:
1
2
3
4
5
6
7
8
9
class TextVeld{
    public void insertArray(){
      for(int i=0;i<al.size();i++){
      //hoogte = i*10;
      personenTextArea.insert(""+al.get(i).toString()+"\n",i);
    }

    }
  }

Maar ik heb meer array's dan alleen maar "al". Het zou dus handig zijn als ik kan doorgeven aan insertArray welke array hij moet uitlezen en in de TextArea.

Maar wat voor type is mijn array? Als ik dat weet kan ik het volgende doen.
Java:
1
2
3
4
5
6
7
8
9
class TextVeld{
    public void insertArray(type naamVanArray){
      for(int i=0;i<naamVanArray.size();i++){
      //hoogte = i*10;
      personenTextArea.insert(""+naamVanArray.get(i).toString()+"\n",i);
    }

    }
  }


Of denk ik nu verkeerd?
al is van type ArrayList, maar netter is om List te gebruiken. Dat is een interface die door ArrayList geimplementeerd is. Voordeel is dat je dan ook andere list typen kan gebruiken, zoals Vector of LinkedList.

Trouwens een tip (java 1.4 en lager; 1.5 kan ook maar die heeft nog mooiere manieren): gebruik ipv
Java:
1
2
3
4
for (int i = 0; i < list.size(); i++)
{
    Object o = list.get(i);
}
liever dit:
Java:
1
2
3
4
for (Iterator i = list.iterator(); i.hasNext(); /* niks hier */)
{
    Object o = i.next();
}
Je moet dan alleen wel opletten dat i.next() meteen 1 element vooruitgaat, en je die dus niet 2x binnen de loop moet aanroepen (tenzij je er echt zeker van bent dat het nodig is). Beter is dan om het object 1x op te slaan en die dan te hergebruiken.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


Verwijderd

ik leer het (informatica opleiding) met een HashSet() (of TreeSet als de volgorde er toe doet), Als elk object ook een uniek kenmerk hebben die altijd origineel is dan is een HashMap en beter idee omdat je dan het juiste object er snel uit kunt halen. maybe ook een aantal optie's om eens naar te kijken

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

Alarmnummer

-= Tja =-

Verwijderd schreef op zondag 08 mei 2005 @ 22:14:
ik leer het (informatica opleiding) met een HashSet() (of TreeSet als de volgorde er toe doet),
In een TreeSet doet de volgorde er niet toe, alleen in een List of in een speciaal gemodificeerde structuren als de LinkedHashMap bv.
Als elk object ook een uniek kenmerk hebben die altijd origineel is dan is een HashMap en beter idee omdat je dan het juiste object er snel uit kunt halen. maybe ook een aantal optie's om eens naar te kijken
Je kunt dan bv mbv een hashcode het object eruit peuteren.

  • Robtimus
  • Registratie: November 2002
  • Laatst online: 07-05 19:18

Robtimus

me Robtimus no like you

Alarmnummer schreef op zondag 08 mei 2005 @ 22:31:
In een TreeSet doet de volgorde er niet toe, alleen in een List of in een speciaal gemodificeerde structuren als de LinkedHashMap bv.
Volgorde doet er wel degelijk toe, alleen niet de volgorde van toevoegen. Een TreeSet is een SortedSet, waarbij alle elementen te allen tijde gesorteerd worden opgehaald met de iterator. Typsich iets dat je wilt hebben als 1) alle elementen maar 1x voorkomen (tov compareTo of de Comparator), en 2) deze in een volgorde moeten staan.

Als 1) niet geldt moet je voor een List en Collections.sort gaan, als 2) niet geldt is een HashSet beter.

More than meets the eye
There is no I in TEAM... but there is ME
system specs


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

Alarmnummer

-= Tja =-

IceManX schreef op maandag 09 mei 2005 @ 09:06:
[...]
Volgorde doet er wel degelijk toe, alleen niet de volgorde van toevoegen.
Dat bedoelde ik dus ook.
Pagina: 1