Java-constructor in object lukt niet

Status
Niet open voor verdere reacties.

timmie1

Gebruiker
Lid geworden
20 mrt 2009
Berichten
291
Ik ben een HBO-ICT student die voor zijn opleiding ook wat met Java is begonnen.
Ik moet een opdracht doen waarbij ik in BlueJ werk.
Opdracht is als volgt:

Maak een klasse Programmeur. Geef deze klasse een constructor waarin je de naam van de programmeur, en zijn/haar specialiteit kunt invoeren.
In de klasse Programmeur moet ook een methode print() gemaakt worden die de attributen van het object op het scherm afdrukt.
Zorg ervoor dat deze klasse ook de juiste “getters” en “setters” bevat.

Zo gezegd, zo gedaan. Object gemaakt, constructor gemaakt. Deze vraagt 3 gegevens in te voeren als String.
De enige methode is een System.out.println() met "tekst" en de gevraagde Strings uit de constructor.
Echter, als ik print, krijg ik niet de ingevulde String te zien maar het woordje "null".
Wat doe ik verkeerd?

Hieronder de broncode:


Code:
/**
 * Een systeem om Programmeurs te maken met een specifieke naam en bijbehorende gegevens.
 * 
 * @author (Tim ) 
 * @version (Version 1.0.0 build 06.10.2012)
 */
public class Programmeur
{
    
    // Velden
    private String naam;
    private String specialiteit;
    private String bedrijf;
   

    /**
     * Voer de naam van de programmeur in.
     */
    public Programmeur(String naam, String specialiteit, String bedrijf)
    
    {
    }

   
    
    /**
     * Print de ingevoerde gegevens van de programmeur
     */
    public void PrintGegevens()
    {
    // Een virtueel kaartje afdrukken met de gegevens van de programmeur
    System.out.println("******Objects Everywhere******");
    System.out.println("****** " + naam + " ******");
    System.out.println("****** " + specialiteit + " ******");
    System.out.println("****** " + bedrijf + " ******");
    System.out.println("****** Niets van deze gegevens mag worden gebruikt door derden ******");
    System.out.println("****** zonder toestemming van de eigenaar ******");
    }
        
    
        
}
 
Laatst bewerkt door een moderator:
Je moet de parameters die de constructor meekrijgt (String naam, String specialiteit en String bedrijf) nog toekennen aan de velden.
Code:
this.naam = naam;
//etc

Als je jezelf wat typewerk wilt besparen zou je ook dit kunnen doen (al is het misschien wat minder net)
Code:
public Programmeur(String n, String s, String b)
{
  naam = n;
  specialiteit = s;
  bedrijf = b;
}

De parameters van de constructor zijn dus niet dezelfde variabelen als de velden van de klasse, ook niet als ze dezelfde naam hebben.
 
Laatst bewerkt:
Bedankt voor de informatie, het hielp me heel erg!
Ik mag van de docent geen aliassen toepassen (zo noem je dat toch) dus zal ik het toch voluit moeten schrijven. In ieder geval bedankt voor de tip.

Ik heb nu nog een vraagje:

Ik ben nu een Team-Klasse aan het maken. Deze heeft een constructor die vraagt om een projectnaam en deadline, beide in String.
Deze initialisren nu wel, dankzij jouw tip. Ik moet nu op de een of andere manier de programmeurs in teams verdelen.
Ik dacht dit te kunnen doen door te filteren op projectnaam en dan met "if" te filteren op projectnaam. Dus bij programmeur vragen om String-projectnaam, bij Team precies hetzelfde.
Hoe kan ik de projectnaam van de Programmeur vergelijken met de projectnaam van het Team? Ik kan private Programmeur project natuurlijk niet aanroepen want Team heeft precies hetzelfde.
(uitvoer als system.out.println)



Hartelijk dank voor het meedenken! :)
 
Laatst bewerkt:
Nee, dat zijn geen aliassen. Van aliassen is sprake als je twee verschillende variabelen hebt die naar hetzelfde object wijzen.

Je tweede vraag is me niet helemaal duidelijk. Bedoel je te vragen hoe je de private velden van Programmeur kan opvragen? Om private velden van een object te kunnen lezen/wijzigen wordt meestal gebruik gemaakt van get en set methoden.
 
daar zijn de getters en setters voor....programeur.getNaam() en team.getnaam() en dan if(programeur.getnaam().equals(team.getnaam()) {//doe je ding}

maar volgens mij wordt er bedoelt dat je de programmeurs aan een team moet toevoegen of niet?
Zo ja, dan maak je in de Classe team een ArrayList aan 'Arraylist<programmeurs> a = new ArrayList<programmeurs>() ' en dan voeg je het object programmeurs toe aan de lijst 'a.add(programmeur)' in de klasse programmeur override je de toString methode 'string toString()' en dan kan je in de klasse team met een for-loop door de Arraylist heen lopen en de gegevens 'printen'

Daarnaast vind ik Blue J echt een hele slechte leeromgeving, ik raad zelf aan om een kijkje te nemen in Eclipse (of netbeans, heb ik geen ervaring mee) dit geeft meer duidelijkheid, maar goed, mijn mening :)

even een extra notitie, het is alweer meer dan een half jaar geleden dat ik java heb gedaan, ben ondertussen overgestapt naar C# dus het kan zijn dat er kleine foutjes in de code zit die ik gaf. Succes iig
 
Laatst bewerkt:
Toevoeging op het bericht van EdjeCageman:

Als het goed is krijg je in BlueJ in hoofdstuk 3 en 4 te maken met ArrayLists. Dit weet ik, omdat ik het zelf ook heb gebruikt.
In het boek staat uitgelegd hoe je een ArrayList maakt en hier gegevens in stopt.
In jouw geval een Team en Programmeur:

Deze code moet dan in de klasse Team staan, hoogstwaarschijnlijk in de constructor:
Code:
ArrayList<Programmeur> programmeurs = new ArrayList<Programmeur>(); //hetzelfde wat Edje zei, maar dan juiste namen, anders kent Java het nog steeds niet.
programmeurs.add(new Programmeur(naam, specialiteit, bedrijf)); //naam, specialiteit en bedrijf zijn dus in overeenkomst met de parameters van de constructor in Programmeur.

@EdjeCageman
Helaas kom je niet onder BlueJ uit als dit een verplichting is door school en er boeken voor zijn.
 
Laatst bewerkt:
Ik ben ook in BlueJ bezig en ik vind het juist géén slecht programma om mee te beginnen. Het visualiseert de stappen en dat zegt me meer dan die taaie droge kost.
Zodra ik doorheb hoe het allemaal werkt met methodes en constructors stap ik over, maar tot die tijd nog even met BlueJ. :thumb:
 
Ieder z'n eigen mening ;)
Het brengt wel heel goed de stappen in zicht, dat ben ik met je eens :) Maar vind Eclipse een betere/lekkerder ontwikkelomgeving :) maar ook hierbij weer, mijn mening :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan