Archief - Java - Meerdimensionale array vraag

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

deathsythe

Legacy Member
Hallo,

is het mogelijk om in een meerdimensionale array verschillende objecten te steken?

if so, hoe doe je dat dan?
Code:
gegeven classes;

lid, leden, boek, boeken, lening, uitleningen

Kan dit dus maw?

Code:
Leden [][][] lijst = new Leden [aantalleden][aantalboeken][aantaluitleningen]
for (int i =0; i < aantalleden; i++)
{
   lijst = new Lid() 
            for (int j =0;j < aantalboeken; j++)
                {
                    lijst[i] = new Boeken();
                         for (int k=0;  k<aantalleningen;k++)
                                {
                                       lijst[i][j]= new Leningen();          
}
}
}

of ben ik beter door 3 aparte arrays te maken (1D) ?
dus zo iets
Code:
class Leden {
private Lid [] naam 
           {
                public Leden()
                     {
                      naam = new Lid[10];
                     }
           }
}

thanks in advance

Cycloon

Legacy Member
Zorg dat een lid uitleningen kan hebben van boeken ipv alles in 1 grote array te proppen. De arrays zullen er nog steeds zijn, maar op een meer logische plaats.

deathsythe

Legacy Member
dus zoals de 2de uitwerking ongeveer, ok

nuja vraag blijft, puur uit interesse, kan de bovenstaande voorstelling van een 3D array? (gewoon omdat het niet in mijn cursus staat)

Cycloon

Legacy Member
Leden zou geen object mogen zijn.

Je zou eerder zoiets moeten hebben:

Lid (Naam)
Boek (Titel,Auteur)
Uitlening (Lid, Boek[])

Leden is dan gewoon Lid[] (net zoals Boek[] en Uitlening[]) ergens in een main class, of ergens anders in het model.

YaMo

Legacy Member
En zoals het in het voorbeeld staat kan het volgens mij sowieso niet, want
"Leden[][][] lijst" is een 3-dimensionale array van objecten van de "Leden" klasse (wat die klasse ook mag inhouden...). Daar kunnen dus alleen Leden-objecten in of objecten van een klasse die overerft van Leden.
Voor wat jij zou willen doen (wat je beter doet zoals Cycloon zegt), heb je een array van het type "Object[][][]" nodig, aangezien alle klassen overerven van Object.

MilM

Legacy Member
Ja, dat kan en wordt zelfs vaak gedaan.
Het type van de array is dan van een parent class.

In dit geval is de enigste mogelijkheid om dus inderdaad een array te definiëren van het type "Object". Let wel, als je daarna iets uit die array haalt en velden of functies wil gebruiken van een specifieke klasse (bijvoorbeeld "Leden") moet je dit object wel terug omzetten naar Leden (en daarvoor moet je dus weten welk type erin zit).

Ondanks dat het mogelijk is, is het hier wel een slechte oplossing.
Zoals Cycloon aanhaalde, er zit geen logica in uw oplossing.

Het is niet de bedoeling om één mega array aan te maken waar alle mogelijke data kan inzitten. Waarom zou je anders een OO taal gebruiken?

Eerst definieer je welke "objecten" je hier hebt.

Twee objecten zijn redelijk duidelijk:
  1. Boek
  2. Lid

Dit zijn zaken die ge kunt vastpakken, die elk bepaalde attributen hebben (een lid heeft bijvoorbeeld een naam, voornaam, adres ...; een boek heeft bijvoorbeeld een titel, aantal bladzijden ...) etc

Boeken en leden zijn geen objecten. Boeken is een verzameling van "boek objecten" en leden van "lid objecten". (alhoewel verzamelingen en collecties technisch gezien ook wel een object zijn)

Een array is een voorbeeld van hoe je zo'n verzameling kunt opslaan (net als niet primitieve collecties zoals ArrayList).

Uitlening zou je eerder kunnen omschrijven als een "relatie" dan een object.
Je zou dit op verschillende manieren kunnen bijhouden.

Een mogelijkheid is om een object "Uitlening" te definiëren zoals Cycloon gedaan heeft:
Uitlening (Lid, Boek[])

Een andere mogelijkheid is om deze array bij te houden bij bijvoorbeeld het "Lid" object. Je kan daar een ArrayList definiëren (of een gewone array) en elke keer een lid een bepaald boek leent toevoegen aan deze lijst.

Als hij ze terugbrengt, kun je deze ofwel uit de lijst verwijderen (als er geen history moet bijgehouden worden) of verplaatsen naar een andere lijst die de history van uitlening bijhoudt.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan