[Java] Object nummeren

Pagina: 1
Acties:

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 07-09 13:40

Jaspertje

Max & Milo.. lief

Topicstarter
Alweer...

Hoe kan je een autonummering maken bij objecten, zit namelijk zo, ik maak obejcten aan (0,1 en 2), en tijdens het draaien moeten er nog meer bijkomen. Hoe kan ik zeggen in java: "selecteer het hoogste indexnummer en doe dat +1"..

als dat gebeurt is moet ik ook nog tellen hoeveel indexnummers er zijn voor de loop, ook daar suggesties voor??

het is voor school, het hoeft niet voorgekauwd te worden, maar ik snap daar niet zoveel van

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

Alarmnummer

-= Tja =-

Dat zou je kunnen doen met een static int _counter bv. Een statische variable is een variable die hoort bij een classe ipv een instantie (die jij altijd gebruikt). Hierdoor heeft iedere instantie beschikking over die variable. En iedere keer als je in een constructor komt dan kan je die _counter 1 ophogen.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Kun je geen Vector gebruiken ? Dat is een array van objecten waar je emt de methoden add(Object) en remove(Object), get(int) en size() objecten kunt toevoegen, verwijderen en zien hoe groot de array is :) Check de API docs bij java.util.Vector :)

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 07-09 13:40

Jaspertje

Max & Milo.. lief

Topicstarter
Op donderdag 14 maart 2002 14:30 schreef Alarmnummer het volgende:
Dat zou je kunnen doen met een static int _counter bv. Een statische variable is een variable die hoort bij een classe ipv een instantie (die jij altijd gebruikt). Hierdoor heeft iedere instantie beschikking over die variable. En iedere keer als je in een constructor komt dan kan je die _counter 1 ophopen.
ik zal ff laten zien wat ik nu doe, misschien kan je dan iets meer uitleg geven waardoor het voor mij (misschien iets) duidelijker wordt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
  f[1]= new Hoofdfilm();
  f[1].setTitel("Star wars II");
  f[1].setSpeelduur(114);
  f[1].setGenre("Kinderfilm");
  f[1].setKeuring("6 ob");
  f[1].setSpeelweken(10);

  f[2]= new Hoofdfilm();
  f[2].setTitel("Godfather IV");
  f[2].setSpeelduur( 164);
  f[2].setGenre("Geweld");
  f[2].setKeuring("12");
  f[2].setSpeelweken(5);


  f[3]=new Hoofdfilm();
  f[3].setTitel("Ali");
  f[3].setSpeelduur(105);
  f[3].setGenre("Geweld");
  f[3].setKeuring("al");
  f[3].setSpeelweken(15);

dit doe ik...... en die f[nummer] moet dus iets hoger

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 07-09 13:40

Jaspertje

Max & Milo.. lief

Topicstarter
Op donderdag 14 maart 2002 14:33 schreef MisterData het volgende:
Kun je geen Vector gebruiken ? Dat is een array van objecten waar je emt de methoden add(Object) en remove(Object) en size() objecten kunt toevoegen, verwijderen en zien hoe groot de array is :) Check de API docs bij java.util.Vector :)
jongens heb net een week of vier java gehad en dus niet echt weet ervan... en dat remove.. ik maak gewoon iets 0 en dan filter ik het er voor de loop uit

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

Alarmnummer

-= Tja =-

Op donderdag 14 maart 2002 14:33 schreef MisterData het volgende:
Kun je geen Vector gebruiken ? Dat is een array van objecten waar je emt de methoden add(Object) en remove(Object), get(int) en size() objecten kunt toevoegen, verwijderen en zien hoe groot de array is :) Check de API docs bij java.util.Vector :)
Je kan beter een arrayList nemen ipv een vector als het niet multithreaded is. Een vector is synchronized en een arraylist niet. En synchronized is niet gratis :) (alhoewel dat met de huidige vm`s niet zoveel meer uitmaakt als vroeger).

Een andere reden om arraylist te gebruiken is dat het duidelijk is. Je wekt niet de indruk multithreaded te zijn :)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op donderdag 14 maart 2002 14:34 schreef Jaspertje het volgende:

[..]

jongens heb net een week of vier java gehad en dus niet echt weet ervan... en dat remove.. ik maak gewoon iets 0 en dan filter ik het er voor de loop uit
Je wilt een hele lijst met objecten bijhouden die allemaal een numer krijgen (automatisch). Dan KUN je een array gebruiken, maar dat werkt imho irritant, omdat je vantevoren al moet weten hoe groot die array gaat worden. Wat ik dus altijd gebruik is een Vector. Voorbeeld :
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Vector;
// rest van je code
public void maakVector() {
  Vector v = new Vector();
  MijnObject aa = new MijnObject();
  v.addElement(aa);
  MijnObject bb = new MijnObject();
  v.addElement(bb);

  // en nu eentje eruit halen op basis van nummer (0)
  MijnObject iets = (MijnObject)v.elementAt(0);

}

ZO makkelijk is het :)

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 07-09 13:40

Jaspertje

Max & Milo.. lief

Topicstarter
Op donderdag 14 maart 2002 14:38 schreef MisterData het volgende:

[..]

Je wilt een hele lijst met objecten bijhouden die allemaal een numer krijgen (automatisch). Dan KUN je een array gebruiken, maar dat werkt imho irritant, omdat je vantevoren al moet weten hoe groot die array gaat worden. Wat ik dus altijd gebruik is een Vector. Voorbeeld :
Nee niet allemaal, alleen degene die er later bijkomen daar moet ik het laatste cijfer van de index (het hoogste) +1 doen

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op donderdag 14 maart 2002 14:35 schreef Alarmnummer het volgende:

[..]

Je kan beter een arrayList nemen ipv een vector als het niet multithreaded is. Een vector is synchronized en een arraylist niet. En synchronized is niet gratis :) (alhoewel dat met de huidige vm`s niet zoveel meer uitmaakt als vroeger).

Een andere reden om arraylist te gebruiken is dat het duidelijk is. Je wekt niet de indruk multithreaded te zijn :)
Ach, maakt niet zoveel uit, ik neem aan dat de methodes voor beide klassen zo heten, dus mocht je je single-threaded zooi ooit multithreaded willen maken, dan verandere je gewoon ArrayList in Vector en klaar is Jaspertje :)

Al heeft de topicstarter (nog) niet zoveel aan dit, als ie niet weet hoe threading werkt. Owkee, gebruik dan een ArrayList.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op donderdag 14 maart 2002 14:40 schreef Jaspertje het volgende:

[..]

Nee niet allemaal, alleen degene die er later bijkomen daar moet ik het laatste cijfer van de index (het hoogste) +1 doen
Als je een object toevoegt aan een Vector/ArrayList dan krijgt ie automatisch een index toegewezen, en dat nummert gewoon door. Heb je 100 objecten in dat ding zitten en stop je er eentje bij dan krijgt die index 101 :)

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

Alarmnummer

-= Tja =-

Je kan beter zoiets doen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Hoofdfilm{
 
   private String m_naam;
   private String m_categorie;

   public Hoodfilm(String naam, String categorie){
     m_naam = naam;
     m_categorie = categorie;
   }

   public String getNaam(){
     return m_naam;
   }
   
   public String getCatergorie(){
     return m_categorie;
   }
}

en dan aanroepen met
code:
1
2
3
4
5
6
Hoofdfilm bambiHoofdfilm = new HoofdFilm("bambi","hp");
Hoofdfilm ramboHoofdfilm = new HoofdFilm("rambo","hp");

ArrayList list = new ArrayList();
list.add(bambiHoofdfilm);
list.add(ramboHoofdfilm);

Als jij namelijk al je velden van je classe publiekelijk gaat maken dan kan iedereen er aan komen, en dat wil je niet. Je kan die velden veel beter meteen meegeven aan je constructor. En door gebruikt te maken van een collectie class (arraylist,vector,hashmap etc etc) kan de groote van de verzameling groeien.. En dat kan met een array nietomdat je daar vast zit aan je begint groote.

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 12-09 22:53

NetForce1

(inspiratie == 0) -> true

Op donderdag 14 maart 2002 14:41 schreef MisterData het volgende:

[..]

Als je een object toevoegt aan een Vector/ArrayList dan krijgt ie automatisch een index toegewezen, en dat nummert gewoon door. Heb je 100 objecten in dat ding zitten en stop je er eentje bij dan krijgt die index 101 :)
[zeik modus]
nee hoor 100, je begint nl. (als het goed is) bij nul
[/zeik modus]

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op donderdag 14 maart 2002 14:43 schreef Alarmnummer iets wat leek op mijn reply
Idd, dat bedoelde ik dus ook :)

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 07-09 13:40

Jaspertje

Max & Milo.. lief

Topicstarter
hoe moet ik dan de nieuwe dingen toevoegen, ik heb nu dit (klopt niet overigens
code:
1
2
3
4
5
6
    f[4]= new Hoofdfilm();
    f[4].setTitel(t[index].getTitel());
    f[4].setSpeelduur(114);
    f[4].setGenre(t[index].getGenre());
    f[4].setKeuring("6 ob");
    f[4].setSpeelweken(10);

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op donderdag 14 maart 2002 14:44 schreef NetForce1 het volgende:

[..]

[zeik modus]
nee hoor 100, je begint nl. (als het goed is) bij nul
[/zeik modus]
Dat klopt inderdaad ja, dacht er net aan :) Ach ja, dat soort fouten komen bij mij altijd pas aan het licht als het programma al draait en ik me ga afvragen waar toch die NullPointerException/ IndexOutOfBOundsException vandaan komt :P

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op donderdag 14 maart 2002 14:46 schreef Jaspertje het volgende:
hoe moet ik dan de nieuwe dingen toevoegen, ik heb nu dit (klopt niet overigens
code:
1
2
3
4
5
6
    f[4]= new Hoofdfilm();
    f[4].setTitel(t[index].getTitel());
    f[4].setSpeelduur(114);
    f[4].setGenre(t[index].getGenre());
    f[4].setKeuring("6 ob");
    f[4].setSpeelweken(10);
Je werkt nu met arrays. Als ik dit zou moeten schrijven met een Vector of iets dergelijks, dan wordt het zoiets :
code:
1
2
3
4
5
6
7
8
9
Vector films = new Vector();

HoofdFilm film = new Hoofdfilm();
    film.setTitel(((HoodfFilm)films.elementAt(index)).getTitle());
    film.setSpeelduur(114);
    film.setGenre((((HoodfFilm)films.elementAt(index)).getGenre());
    f[4].setKeuring("6 ob");
    film.setSpeelweken(10);
   films.addElement(film);

Zoiets dus :) Duidelijk ?

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 07-09 13:40

Jaspertje

Max & Milo.. lief

Topicstarter
Op donderdag 14 maart 2002 14:46 schreef MisterData het volgende:

[..]

Dat klopt inderdaad ja, dacht er net aan :) Ach ja, dat soort fouten komen bij mij altijd pas aan het licht als het programma al draait en ik me ga afvragen waar toch die NullPointerException/ IndexOutOfBOundsException vandaan komt :P
en dat moet dus ook opgelost worden oin die loop die ik heb, daar moet ik het hoogste getal ook neerzetten, daar een oplossing voor?

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

Alarmnummer

-= Tja =-

Op donderdag 14 maart 2002 14:46 schreef Jaspertje het volgende:
hoe moet ik dan de nieuwe dingen toevoegen, ik heb nu dit (klopt niet overigens
code:
1
2
3
4
5
6
    f[4]= new Hoofdfilm();
    f[4].setTitel(t[index].getTitel());
    f[4].setSpeelduur(114);
    f[4].setGenre(t[index].getGenre());
    f[4].setKeuring("6 ob");
    f[4].setSpeelweken(10);
als je gebruikt maakt van een array (wat je niet moet doen omdat die niet kan groeien)

f[4]=new Hoofdfilm(t[index].getTitle(),114,etcetcetc);

Je moet dus argumenten meegeven aan je constructor zodat je van die irritante setters af bent.

bij een arraylist kan je dit doen:
list.add(new Hoofdfilm(t[index].getTitle(),114,etcetcetc));

en die voegt hem automatisch achteraan.

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op donderdag 14 maart 2002 14:49 schreef Jaspertje het volgende:

[..]

en dat moet dus ook opgelost worden oin die loop die ik heb, daar moet ik het hoogste getal ook neerzetten, daar een oplossing voor?
Je wilt weten hoeveel films er al in de lijst zitten ? Doe je toch gewoon filmvector.size(); :? En als je het laatste element moet hebben dan moet je mijn bovenstaande code bekijken :)

  • MisterData
  • Registratie: September 2001
  • Laatst online: 07-09 20:23
Op donderdag 14 maart 2002 14:50 schreef Alarmnummer het volgende:

[..]
LOL, net als ik iets heb gepost kom jij met (ongeveer) precies hetzelfde :D

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

Alarmnummer

-= Tja =-

Op donderdag 14 maart 2002 14:51 schreef MisterData het volgende:

[..]

LOL, net als ik iets heb gepost kom jij met (ongeveer) precies hetzelfde :D
:)

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 07-09 13:40

Jaspertje

Max & Milo.. lief

Topicstarter
het enoge probleem is dat ik voor school nog geen vector heb gehad, en zover als ik nu ben kan ik het ook wel inleveren, dat zou ook wel goed zijn... alleen dan weet ie zeker dat ik niet alleen gedaan heb......

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

Alarmnummer

-= Tja =-

Op donderdag 14 maart 2002 14:55 schreef Jaspertje het volgende:
het enoge probleem is dat ik voor school nog geen vector heb gehad, en zover als ik nu ben kan ik het ook wel inleveren, dat zou ook wel goed zijn... alleen dan weet ie zeker dat ik niet alleen gedaan heb......
Wat maakt dat nou uit? Als je maar weet wat je doet (dat is namelijk wel erg belangrijk). En met een array werken als je compile time nog niet weet hoeveel elementen in je lijst komen is niet te doen. :)

Verwijderd

Beetje omslachtig hoor, maar als je weingig ervaring hebt met java en geen ervaring met vectors en/of array-lists kun je natuurlijk het volgende doen als je een object aan een array wilt toevoegen:

- Maak een nieuwe array die een index heeft die 1 groter is dan de originele array.
- Zet dan de waarden van de oude array in de nieuwe array (for-loopje) en voeg als laatste je nieuwe object toe.

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

Alarmnummer

-= Tja =-

Op donderdag 14 maart 2002 15:02 schreef Jofmob het volgende:
Beetje omslachtig hoor, maar als je weingig ervaring hebt met java en geen ervaring met vectors en/of array-lists kun je natuurlijk het volgende doen als je een object aan een array wilt toevoegen:

- Maak een nieuwe array die een index heeft die 1 groter is dan de originele array.
- Zet dan de waarden van de oude array in de nieuwe array (for-loopje) en voeg als laatste je nieuwe object toe.
Maak dan ff een wrapper om die array heen en geef hem automatisch bv 10 elemeten extra. Dan hoef je niet zoveel te copieren. Je kan dan intern ook even een index bij houden van het aantal gebruikte elementen.

En dan komen we eigelijk uit bij de arraylist, die doet dit namelijk ook :)

hup... ga weer aan de slag met perl ;)

en je kan ook beter gebruik maken van een System.arraycopy. Dat is namelijk sneller.
Pagina: 1