[java] lege positie in een array

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

  • MMUilwijk
  • Registratie: Oktober 2001
  • Laatst online: 22:24
Korte uitleg :

Ik heb een klasse Lid die per object Lid een array aanmaakt om een maximum
van 3 exemplaarnummers op te slaan.

Allereerst het ontwerp van de klasse Lid

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Lid
{
  //Attributen
  private int lidNr;
  private String naam;
  private int[] exemplaarNrs;
  private Exemplaar exemplaar;
  private int[] exemplaararray;
  private int exemplaarnr;
  private int aantalUitleningen;
  private int aantal = 0;
  private int i;

  //Constructor
  public Lid ()
  {
  exemplaarNrs = new int[3];
  }


de attributen lidNr en naam worden gevuld door een externe klasse, dus die hoeven niet in de constructor als parameters meegegeven te worden :)
dan de methode om een doorgekregen exemplaarnummer op te slaan in de net
aangeroepen Array :
code:
1
2
3
4
5
6
public void zetUitlening(int exemplaarnr)
  {       
  for (i=0; i < 3; i++)
  if (exemplaarNrs[i] == 0)
  exemplaarNrs[i] = exemplaarnr;
  }


Wat ik hier tracht te doen is de eerste lege positie in de array te vinden (op het moment dat een element dus nul is), daar stop ik dan het meegekregen exemplaarnummer in.
Echter, ongeacht het exemplaarnummer wat wordt meegegeven krijg ik altijd exemplaarnummer 0 in de array.
Ik vraag mijn array namelijk op door middel van een kopie naar mijn applet :
code:
1
2
3
4
5
6
7
8
9
10
public int [] geefExemplaarnrs()
  {
  // Maakt eerst een nieuwe array aan, daarna kloont hij deze en stelt hem
  // beschikbaar via de return
  int[] exemplaararray = new int[3];
  for (i = 0; i < 3;i++)
  exemplaarNrs[i] = exemplaararray[i];
  i++;
  return exemplaararray;
  }


In de applet waar de kopie wordt opgevraagd lees ik elk element weer uit en plaats die naar een conversie in een tekstvak.
code:
1
2
3
4
5
6
7
8
  int[] array = new int[3];
  array = lid.geefExemplaarnrs();
  // eerste exemplaar in bezit van het lid
  int expl1 = array[0];
  exemplaar1Veld.setText("" + expl1);
  exemplaar = Bibliotheek.geefExemplaar(expl1);
  String exemplaarnaam1 = exemplaar.geefTitel();
  titel1Veld.setText(exemplaarnaam1);


dit doe ik voor elk element, dus [0], [1] en [2]...
Maar in elk veld krijg ik een exemplaarnummer 0...

De vraag is dus hoe dit nu kan ? Ik denk zelf dat het verkeerd gaat bij het kopieren van de originele array elementen naar de array exemplaararray.
Kan iemand aangeven waar ik de fout in ga ?

Everytime I suffer I become a better man because of it


  • Glimi
  • Registratie: Augustus 2000
  • Niet online

Glimi

Designer Drugs

(overleden)
Lange vraag, kort antwoord :) Gebruik een Collection object ipv een Array.

Ik heb geen zin om op te gaan zoeken waar het fout gaat, maar door prutsen met een array om te zoeken waar het eerste lege element zit gaat makkelijker met een Collection :) Tevens zijn array geen echte objecten, wat ze weer 'speciaal' maakt. Speciaal zuigt ;)

Ten overvloede:
[rml]Glimi in "[ C / C++] De grootte van een array"[/rml]

  • MMUilwijk
  • Registratie: Oktober 2001
  • Laatst online: 22:24
Hmm tja, daar ben ik alleen niet mee bekend en ik moet deze array gebruiken...

Everytime I suffer I become a better man because of it


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

Alarmnummer

-= Tja =-

Een aantal opmerkingen:
1) ik zie dat je een globale index hebt. Het zal wel sneller zijn, maar het is not done.
opl
for(int k=0;k<3;k++)
doIets

2) gebruik een list (bv een arraylist) ipv een array. Arrays zuigen omdat je vast zit aan een bep grote

3) je gebruikt magic numbers , bv 3. Je moet even een constante declareren:
public final static int MAX_AANTAL = 3; en daar verder mee werken

4) waarom doe je die i++ na die forlus in geefExemplaarnrs

5) duidelijkere methode namen vb geeftExemplaarnrs ofzo

6) duidelijkere variable namen exemplaararray

7)waarom maak je bij je laatste voorbeeld een array aan bij de variable 'array' (jaja.. rotnaam)
je krijgt uit de methode geefExemplaarnrs toch een nieuwe array
je kan dus zeggen:
int[] array = lid.geefExemplaarnrs();

8 )
public void zetUitlening(int exemplaarnr)
{
for (i=0; i < 3; i++)
if (exemplaarNrs[i] == 0)
exemplaarNrs[i] = exemplaarnr;
}

Je moet stoppen, je blijft doorgaan met het toekennen.

9 ) en een beginner moet eigelijk altijd gebruik maken van accalades. Dus

for(int x=0;x<blaat;x++){
....
}

if(blaat){
}

etc etc. Dit doe je niet, en je code is zeer slecht te lezen