klein probleempje met jagged array

Status
Niet open voor verdere reacties.

jimowns

Gebruiker
Lid geworden
2 sep 2006
Berichten
341
Beste forumleden,

ik heb een oefening gemaakt, maar ik zit met een nullreferentieexception met het uit printen.
ik snap nietgoed wat ik verkeert gedaan heb.

de oefening zelf:
ik moet een GUI maken zodat een student zijn vakken kan bijvoegen, de vakken, naam, en punten worden in een jagged array opgeslagen en deze word dan afgedrukt wanneer je op de knop samenvatting drukt.


code waar de fout inzit:
Code:
namespace Oefening6
{
    class Samenvatting
    {
        public OpleidingsOnderdeel[][] Opleiding { set; get; }
        public OpleidingsOnderdeel binnenKomendeGegevens { set; get; }
        public static OpleidingsOnderdeel[] tijdelijkeOplsag { set; get; }
        private static int aantalElementenGemaakt = 0;

        public Samenvatting(OpleidingsOnderdeel opleidingsOnderdeel)
        {
            aantalElementenGemaakt++;
            binnenKomendeGegevens = opleidingsOnderdeel;
            maakArrayGrooter();
        }

        public Samenvatting() { }

        private void maakArrayGrooter()
        {
            tijdelijkeOplsag = new OpleidingsOnderdeel[0]; // bestaande array
            OpleidingsOnderdeel[] overzetten = new OpleidingsOnderdeel[aantalElementenGemaakt]; // kopieerde met andere grootte

            tijdelijkeOplsag.CopyTo(overzetten, 0);
            overzetten[aantalElementenGemaakt - 1] = binnenKomendeGegevens;

            tijdelijkeOplsag = overzetten;

            overzetten = null;

            MessageBox.Show(tijdelijkeOplsag.Length.ToString());
        }

        public void zetJaggedArray()
        {
            

            Opleiding = new OpleidingsOnderdeel[tijdelijkeOplsag.Length][];
            Opleiding[0] = tijdelijkeOplsag;

            //for (int i = 0; i < tijdelijkeOplsag.Length; i++)
            //{
            //    Opleiding[i] = new OpleidingsOnderdeel[1] { tijdelijkeOplsag[i] };
            //    MessageBox.Show(Opleiding[i][0].StudentGegevens.Naam);
            //}
        }
        public override string ToString()
        {
            string opleidingen = "";
            for (int i = 0; i < Opleiding.GetLength(0); i++)
            {
                for (int j = 0; j < Opleiding[i].Length; j++)
                {
                    opleidingen += " Naam: " + Opleiding[i][j].StudentGegevens.Naam + " Opleiding: " + Opleiding[i][j].OpleidingOnderdeel +
                                   " Punten: " + Opleiding[i][j].Punten.ToString("0.00") + Environment.NewLine;
                }
                opleidingen += Environment.NewLine;
            }
            return opleidingen;
        }
    }
}

Bijlage:
Bekijk bijlage Oefening6.rar



Met vriendelijke groetjes, Jim
 
Laatst bewerkt:
Welke 'settings' wil je elk opleidingsonderdeel precies meegeven?
Die kun je gewoon in een klasse gooien:

[CPP]class opleidinsonderdeel
{
public List<string> arVakken;
public int intPunten;

public opleidingsonderdeel(List<string> Vakken, int Punten)
{
arVakken = Vakken;
intPunten = Punten;
}
}[/CPP]

Vervolgens kun je een array (of een generic list) van die opleidingsonderdelen gebruiken.


Ik kan trouwens je voorbeeld niet bekijken (Visual Studio 2010 ondersteunt geen .NET 4.5)
 
Laatst bewerkt:
De bedoeling is dus als volgt:

Ik doe het volgende:

Code:
Naam -> JoZ1
Opleidingsonderdeel -> C#
Punten -> 10
*Add*
Naam -> JoZ1
Opleidingsonderdeel -> Wiskunde
Punten -> 10
*Add*
Naam -> jimowns
Opleidingsonderdeel -> C#
Punten -> 10
*Samenvatting*

Dan is de samenvatting als volgt:

Code:
Naam: JoZ1
Opleidingsonderdeel: C#
Punten: 10

Naam: JoZ1
Opleidingsonderdeel: Wiskunde
Punten 10

Naam: jimowns
Opleidingsonderdeel: C#
Punten 10

Toch?
 
Laatst bewerkt:
HfH9e.png

Download hier.

'Probleem' is dat hier geen reden is voor jagged arrays.

De volgende klassen zijn voldoende:

[CPP] public class opleidingsonderdeel
{
//Bevat: naam, punten en opleiding
public string _opleiding, _naam;
public int _punten;

//Constructor
public opleidingsonderdeel(string naam, string opleiding, int punten)
{
_opleiding = opleiding; _naam = naam; _punten = punten; //Initialisatie
}
}

public class opleiding
{
//Bevat: opleidingsonderdelen
private opleidingsonderdeel[] OO = new opleidingsonderdeel[0];

//Voeg een onderdeel toe
public void VoegToe(opleidingsonderdeel x)
{
opleidingsonderdeel[] OOtemp;
OOtemp = new opleidingsonderdeel[OO.Length+1];
for (int i = 0; i < OO.Length; i++){
OOtemp = OO;
}
OOtemp[OO.Length] = x;
OO = OOtemp;
}

//Samenvatting
public string genereerSamenvatting()
{
string retVal="";
foreach (opleidingsonderdeel i in OO){
retVal += "Naam: " + i._naam + "\n" + "Opleiding: " +
i._opleiding + "\n" + "Punten: " + i._punten.ToString() + "\n\n";
}
return retVal;
}
}[/CPP]
 
Laatst bewerkt:
Hartelijk bedankt JoZ1 ;) ik heb uw code aangepast en het werkt nu op jagged arrays ;).
Dan kan ik later uitbreiden op het sorten van naam en opleiding ;)
 
Graag gedaan!
Als er nog vragen zijn hoor ik het wel ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan