Eerste eigen applicatie

Status
Niet open voor verdere reacties.
Ik zit even met het feit dat ik er niet uitkom hoe ik telkoks() moet maken.

- Moet deze in de main-method komen of in de class kok?
- gebruik ik dan ergens System.out.println(Kok.length); ? en zo ja waar?
- of doe ik dat in de method telkoks() ? en zo ja hoe komt dat er dan uit te zien, zo : (?)

Code:
public int telkoks() {
    return Kok.length;
}

Verder zit ik met het "probleem" dat ik in de classes Personen en Medewerkers alle variabelen private heb gemaakt (wat volgens mij ook moet), maar mijn compiler geeft dan aan dat ik deze variabelen niet in de main-method van de class DamascusShoarma kan gebuiken.
Kan iemand uitleggen wat ik fout doe?

Hier laat ik het even bij :S
 
Ik zit even met het feit dat ik er niet uitkom hoe ik telkoks() moet maken.

- Moet deze in de main-method komen of in de class kok?
Je hebt nog een arrayList met personen nodig in de mainclass. Daar kan je dan alle personen in zetten en dan is het ook makkelijker tellen

Wat je nog nodig hebt is een lijst waar iedereen in staat.
Wat je daarvoor kan doen is de Constructor van elke klasse aanpassen dat ze meteen aangemaakt worden met bepaalde variabelen.
Code:
public class Personen {
	private String _naam;
	private String _adres;
	private String _postcode;
	private String _woonplaats;
	
//Nu volgt de contructor
        public Personen(String naam, String adres, String postcode, String woonplaats)
	{
		this._naam = naam;
		this._adres = adres;
		this._postcode = postcode;
		this._woonplaats = woonplaats
	}

	public void setNaam(String nieuweNaam) {
		this._naam = nieuweNaam;
	}
	public String getNaam() {
		return this._naam;
	}
	
	public void setAdres(String nieuwAdres) {
		this._adres = nieuwAdres;
	}
	public String getAdres() {
		return this._adres;
	}
	
	public void setPostcode(String nieuwePostcode) {
		this._postcode = nieuwePostcode;
	}
	public String getPostcode() {
		return this._postcode;
	}
	
	public void setWoonplaats(String nieuweWoonplaats) {
		this._woonplaats = nieuweWoonplaats;
	}
	public String getWoonplaats() {
		return this._woonplaats;
	}
}

Ik geef altijd alle private variabelen van een klasse een teken mee waardor ik ze makkelijk kan herkennen. Normaliter zet ik er een _ voor. Dan is het makkelijk om ze uit elkaar te houden.
Voor jou zou het in eerste instantie ook makkelijk zijn om gebruik te maken van this.
Als je this. doet, dan kan je meteen in de code zien dat je een variabele binnen de eigen klasse aanroept.


Als je dan een nieuwe kok aanmaakt(in de mainclass dan hoef je alleen maar het volgende te doen:
Code:
import java.util.ArrayList;

public class DamascusShoarma {
	private int aantalkoks;
	private int aantalbezorgers;
	private ArrayList<Personen> _personenlijst = new ArrayList<Personen>();
	
	public static void main(String[] args) {
		
		_personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk");
		_personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk");
		_personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum");
		//enzovoort
		//en dan hoeft dit hieronder niet meer
		Kok Jonny = new Kok();
		Jonny.naam = "Jonny";
		Jonny.adres = "Singel 23";
		Jonny.postcode = "1234AB";
		Jonny.woonplaats = "Heemskerk";
		
		Kok Berend = new Kok();
		Berend.naam = "Berend";
		Berend.adres = "Kleidreef 222";
		Berend.postcode = "4321BA";
		Berend.woonplaats = "Beverwijk";
		
		Bezorger Klaas = new Bezorger();
		Klaas.naam = "Klaas";
		Klaas.adres = "Tulpstraat 45";
		Klaas.postcode = "6446JF";
		Klaas.woonplaats = "Castricum";
		
		Bezorger Jan = new Bezorger();
		Jan.naam = "Jan";
		Jan.adres = "Rozengracht 488";
		Jan.postcode = "1011DS";
		Jan.woonplaats = "Amsterdam";
		
		Klant Amanda = new Klant();
		Amanda.naam = "Amanda";
		Amanda.adres = "Commandeurslaan 44";
		Amanda.postcode = "1962JJ";
		Amanda.woonplaats = "Heemskerk";
	}	
}

Nu zijn de personen meteen met hun variabelen aangemaakt. Dan hoef je dat niet nog een keer apart te doen, scheelt een hele lijst met code

- gebruik ik dan ergens System.out.println(Kok.length); ? en zo ja waar?
- of doe ik dat in de method telkoks() ? en zo ja hoe komt dat er dan uit te zien, zo : (?)
Code:
public int telkoks() {
    return Kok.length;
}

Wat je nu het beste kan doen, is de ArrayList doorlopen die in de mainclass staat zo ongeveer:
Code:
public int telKoks()
{
	int totaal = 0;
	for(int i = 0; i > _personenlijst.size()-1; I++){
		als de huidige een kok is, dan 1 optellen bij totaal;
	}
        return totaal;
}
Dan loop je de ArrayList door tot hij aan het einde komt en vervolgens returnt hij de opgetelde waarde
Ik heb size()-1 gedaan omdat als hij totaal 5 lang is, dat hij dan van 0 .. 5 gaat als je er geen -1 bij zet.
Een ArrayList begint altijd bij 0, dus je moet ook bij 0 beginnen te tellen. Dan kom je uit op de getallen 0, 1, 2, 3, 4 en dan heb je er al 5.


Verder zit ik met het "probleem" dat ik in de classes Personen en Medewerkers alle variabelen private heb gemaakt (wat volgens mij ook moet), maar mijn compiler geeft dan aan dat ik deze variabelen niet in de main-method van de class DamascusShoarma kan gebuiken.
Kan iemand uitleggen wat ik fout doe?

Hier laat ik het even bij :S

Dat klopt. Die kan je niet zomaar aanroepen.
Eerst moet je een instantie van de klasse aanmaken voordat je deze kan gebruiken.
Bovenin heb ik de instanties van de klasses "Personen" en alles wat er van erft in de ArrayList _personenlijst gezet.
Als je dan een de kok Jonny moet hebben, dan zoek je die op in de lijst.
Vervolgens kan je dan de getVariabele en setVariabele gebruikem om de variabelen binnen de klasse Kok te wijzigen.

Code:
import java.util.ArrayList;

public class DamascusShoarma {
	private int aantalkoks;
	private int aantalbezorgers;
	private ArrayList<Personen> _personenlijst = new ArrayList<Personen>();
	
	public static void main(String[] args) {
		
		_personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk");
		_personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk");
		_personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum");
		
		_personenlijst.get(0).setNaam("Piet");
	}	
}
Als je die doet, dan verander je de naam van Jonny in Piet.
Op die manier kan je ook de andere variabelen aanpassen. Zoals adres, postcode en woonplaats. (is wel handig als ze verhuizen ;))
 
Laatst bewerkt:
Even een klein puntje van kritiek ;)

Code:
_personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk");
_personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk");
_personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum");

Wel alle haakjes afsluiten he, hahahha.

Hee bedankt voor je informatie, ik was al met this begonnen, maar kwam er niet uit ook.
Nu snap ik this inderdaad wel.
Ook het vullen van die array "personenlijst" is duidelijk, alleen weet ik nu niet hoe ik de medewerkerspecifieke gegevens (sofinummer en salaris uit de class Medewerker) kan toevoegen aan de array.
Of moet ik er dan nog een variabele voor zetten?
Dus zo:

var1 = _personenlijst.add(new Kok(...........));

Zodat ik dan zo kan doen:

ArrayList<var1> = new ArrayList<var>1();
En dan deze array verder vullen?????

Vervolgens:

Wat je nu het beste kan doen, is de ArrayList doorlopen die in de mainclass staat zo ongeveer:
Code:
public int telKoks()
{
int totaal = 0;
for(int i = 0; i > _personenlijst.size()-1; I++){
als de huidige een kok is, dan 1 optellen bij totaal;
}
return totaal;
}
Dan loop je de ArrayList door tot hij aan het einde komt en vervolgens returnt hij de opgetelde waarde
Ik heb size()-1 gedaan omdat als hij totaal 5 lang is, dat hij dan van 0 .. 5 gaat als je er geen -1 bij zet.
Een ArrayList begint altijd bij 0, dus je moet ook bij 0 beginnen te tellen. Dan kom je uit op de getallen 0, 1, 2, 3, 4 en dan heb je er al 5.

Met die forloop ga ik niet door koks heen, maar door alle personen.
In de casus staat ook ergens dat ik een method telkoks() moet maken, maar ik kan niet vinden of ik die dan in DamascusShoarma of in Kok moet maken en hoe.

Ik vind het wel te gek dat je me zo wilt helpen.
Ik heb me meteen maar aangemeld voor de vereniging ;)
 
Even een klein puntje van kritiek ;)

Code:
_personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk");
_personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk");
_personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum");

Wel alle haakjes afsluiten he, hahahha.

oops :o
Hee bedankt voor je informatie, ik was al met this begonnen, maar kwam er niet uit ook.
Nu snap ik this inderdaad wel.
Ook het vullen van die array "personenlijst" is duidelijk, alleen weet ik nu niet hoe ik de medewerkerspecifieke gegevens (sofinummer en salaris uit de class Medewerker) kan toevoegen aan de array.
Of moet ik er dan nog een variabele voor zetten?
Dus zo:

var1 = _personenlijst.add(new Kok(...........));

Zodat ik dan zo kan doen:

ArrayList<var1> = new ArrayList<var>1();
En dan deze array verder vullen?????

Nee. Het is alleen maar:
Code:
_personenlijst.add(new Kok(...........));
Om iets toe te voegen aan de lijst

De ArrayList is 1x aangemaakt. Dat hoeft niet nog een keer te gebeuren
Dat is bij de variabelen gedaan.
Code:
ArrayList<Personen> _personenlijst = new ArrayList<Personen>();
//hoeft maar 1x te gebeuren


Als je nog medewerker specifieke informatie toe wil voegen, dan dien je de contructor van de klasses aan te passen.
Je hebt nu:
Code:
public class Personen {
	private String _naam;
	private String _adres;
	private String _postcode;
	private String _woonplaats;
	
//Nu volgt de contructor
        public Personen(String naam, String adres, String postcode, String woonplaats)
	{
		this._naam = naam;
		this._adres = adres;
		this._postcode = postcode;
		this._woonplaats = woonplaats
	}
//hier nog wat methodes
Omdat de class medewerker de class Personen extend = uitbreidt, kan je er extra variabelen en methode's in zetten.
De constructor moet sowieso aangepast worden en de 2 variabelen waar je het over hebt, die moeten worden toegevoegd aan de class medewerker. (en dus ook aan de classes die van medewerker erven)
Er moeten dus nog 2 private variabelen aan toegevoegd worden en de constructor moet uitgebreidt worden met 2 parameters. (en dus ook nog de daar bijbehorende methode's)

Waar je dan ook om moet denken is als je in de mainclass een kok aanmaakt, dat je dan wel genoeg parameters meegeeft.
Het wordt dan:
Code:
_personenlijst.add(new Kok(var1, var2, var3, var4, var5, var6));

Vervolgens:

Met die forloop ga ik niet door koks heen, maar door alle personen.
In de casus staat ook ergens dat ik een method telkoks() moet maken, maar ik kan niet vinden of ik die dan in DamascusShoarma of in Kok moet maken en hoe.

Wat je doet in die functie telkoks() is de personenlijst doorlopen. Als je in de personenlijst een kok tegenkomt, dan tel je 1 bij het totaal op. Als je de lijst dan compleet hebt doorlopen, dan heb je het totaal aantal koks wat in de personenlijst staat(en wat er dus ook zijn)
Zo kan je het ook doen met bijvoorbeeld: klanten

Ik vind het wel te gek dat je me zo wilt helpen.
Ik heb me meteen maar aangemeld voor de vereniging ;)
]
:thumb:
 
Laatst bewerkt:
Is het niet beter dan om de class Mederwerker te laten vervallen?
Als ik in de constructor personen de parameters salaris en sofinummer ga toevoegen is het nut van een aparte klasse Medewerkers toch verdwenen, of zie ik dat weer verkeerd? :S :D.

Als ik vervolgens in de main de personenlijst ga vullen heb ik voor een aantal personen minder parameters dan voor andere.
Hoe vul ik dat dan tussen de ( en ) in?
Is het niet beter om twee constructors hiervoor te maken:

1. voor Personen met in de main een eigen arraylist;
2. voor Medewerkers met in de main een eigen arraylist.

Dan nog iets:

Ik snap hoe je door je list heen loopt met for, ik begrijp ook waarom die -5 er staat, wat ik alleen niet snap is hoe je kan aangeven (hoe weel de loop) dat het om een Kok() gaat?

iets van;

if (object === Kok) {
// code
}

maar hoe ????? :shocked: :shocked: :shocked:
 
Is het niet beter dan om de class Mederwerker te laten vervallen?
Als ik in de constructor personen de parameters salaris en sofinummer ga toevoegen is het nut van een aparte klasse Medewerkers toch verdwenen, of zie ik dat weer verkeerd? :S :D.
Dat zou kloppen. Maar je zet die niet in de contructor van Personen, maar pas in de contructor van medewerker

Als ik vervolgens in de main de personenlijst ga vullen heb ik voor een aantal personen minder parameters dan voor andere.
Hoe vul ik dat dan tussen de ( en ) in?
Is het niet beter om twee constructors hiervoor te maken:

1. voor Personen met in de main een eigen arraylist;
2. voor Medewerkers met in de main een eigen arraylist.
medewerkers zijn toch personen?
Dus dan zouden de medewerkers en in de lijst met personen moeten komen in de lijst met medewerkers.

Dan nog iets:

Ik snap hoe je door je list heen loopt met for, ik begrijp ook waarom die -5 er staat, wat ik alleen niet snap is hoe je kan aangeven (hoe weel de loop) dat het om een Kok() gaat?

iets van;

if (object === Kok) {
// code
}

maar hoe ????? :shocked: :shocked: :shocked:

Dit ga ik even voor je uitzoeken. Ik dacht als ik het goednog uit mijn hoofd weet, dan moet het met .equals kunnen
Code:
public int telKoks()
{
int totaal = 0;
Kok _kok;
for(int i = 0; i > _personenlijst.size()-1; I++){
if(_personenlijst.get(i).equals(_kok){
dan 1 optellen bij totaal;
}
}
return totaal;
}
 
dan zou het dus zoiets moeten worden:

Code:
public class Personen {
	private String naam;
	private String adres;
	private String postcode;
	private String woonplaats;
	
	 public Personen(String naam, String adres, String postcode, String woonplaats,) {
		this.naam = naam;
		this.adres = adres;
		this.postcode = postcode;
		this.woonplaats = woonplaats;
	}
	
	public void setNaam(String nieuweNaam) {
		this.naam = nieuweNaam;
	}
	public String getNaam() {
		return this.naam;
	}
	
	public void setAdres(String nieuwAdres) {
		this.adres = nieuwAdres;
	}
	public String getAdres() {
		return this.adres;
	}
	
	public void setPostcode(String nieuwePostcode) {
		this.postcode = nieuwePostcode;
	}
	public String getPostcode() {
		return this.postcode;
	}
	
	public void setWoonplaats(String nieuweWoonplaats) {
		this.woonplaats = nieuweWoonplaats;
	}
	public String getWoonplaats() {
		return this.woonplaats;
	}
}


public class Medewerker extends Personen {
	
	private int sofinummer;
	private double salaris;
	
	public Medewerker(String naam, String adres, String postcode, String woonplaats, double salaris, int sofinummer) {
		this.naam = naam;
		this.adres = adres;
		this.postcode = postcode;
		this.woonplaats = woonplaats;
		this.salaris = salaris;
		this.sofinummer = sofinummer
	}
	
	public void setNaam(String nieuweNaam) {
		this.naam = nieuweNaam;
	}
	public String getNaam() {
		return this.naam;
	}
	
	public void setAdres(String nieuwAdres) {
		this.adres = nieuwAdres;
	}
	public String getAdres() {
		return this.adres;
	}
	
	public void setPostcode(String nieuwePostcode) {
		this.postcode = nieuwePostcode;
	}
	public String getPostcode() {
		return this.postcode;
	}
	
	public void setWoonplaats(String nieuweWoonplaats) {
		this.woonplaats = nieuweWoonplaats;
	}
	public String getWoonplaats() {
		return this.woonplaats;
	}
	
	public void setSofinummer(int nieuwSofinummer) {
		sofinummer = nieuwSofinummer;
	}
	public int getSofiummer() {
		return sofinummer;
	}
	
	public void setSalaris(double nieuwSalaris) {
		salaris = nieuwSalaris;
	}
	public double getSalaris() {
		return salaris;
	}
}

import java.util.ArrayList;

public class DamascusShoarma {
	private int aantalkoks;
	private int aantalbezorgers;
	private ArrayList<Personen> personenlijst = new ArrayList<Personen>();
		
	public static void main(String[] args) {
		
		personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk"));
		personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk"));
		personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum"));
		personenlijst.add(new Bezorger("Jan", "Rozengracht 488", "1011DS", "Amsterdam"));
		personenlijst.add(new Klant("Amanda", "Commandeurslaan 44", "1962JJ", "Heemskerk"));
		
	}	
}

Of ben ik nu helemaal van het padje af :confused:

Als bovenstaande correct is dan kom ik er niet uit hoe ik dan het salaris en het sofinummer kan toevoegen aan de medewerkers zonder twee arraylists te maken.

Als bovenstaande niet correct is dan "me is :confused:" :D

Ps. Als ik lastig word moet je het gewoon zeggen hoor, maar ik wil er echt iets van leren.
 
Bijna goed ;)

Code:
public class DamascusShoarma {
	private int aantalkoks;
	private int aantalbezorgers;
	private ArrayList<Personen> personenlijst = new ArrayList<Personen>();
		
	public static void main(String[] args) {
		
		personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk", 10000.00, 1847363));
		personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk", 10000.00, 1736483));
		personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum", 5000.00, 1928393));
		personenlijst.add(new Bezorger("Jan", "Rozengracht 488", "1011DS", "Amsterdam", 5000.00, 1938020));
		personenlijst.add(new Klant("Amanda", "Commandeurslaan 44", "1962JJ", "Heemskerk"));
		
	}	
}

Dan zou je op zoiets komen.
Je kan de 2 extra parameters er aan geven omdat het een Kok is.
De kok kan in de personenlijst gezet worden omdat hij erft van Personen.
De klant heeft niet zoveel parameters nodig, maar kan er toch in gezet worden omdat hij ook erft van Personen.

Dat is het leuke van overerving :)
 
Dan zou je op zoiets komen.
Je kan de 2 extra parameters er aan geven omdat het een Kok is.
De kok kan in de personenlijst gezet worden omdat hij erft van Personen.
De klant heeft niet zoveel parameters nodig, maar kan er toch in gezet worden omdat hij ook erft van Personen.

Betekend dit dan dat ik niet een constructor voor Medewerker() hoef te maken, maar dat dat allemaal in de constructor Personen() kan komen?
Ik geef dan dus die twee extra parameters mee aan de constructor Personen, maar die parameters zijn dus niet verplicht om in te vullen?!?!

Komen de getter en setter methods voor salaris en sofinummer dan wel gewoon in de klasse Medewerker te staan???
 
Elke class moet een constructor hebben
De getters/setters voor salaris en sofi kan je in medewerker zetten omdat Kok en Bezorger die daar weer van erven.
En die 2 extra parameters moeten in Medewerker omdat die alleen voor medewerkers gelden.

Ik paint wel even een klassediagram voor je. Dan heb je overzicht.

[edit]
shoarmatentyw6.jpg
 
Laatst bewerkt:
óf het wordt steeds waziger of ik kom steeds dichter bij de oplossing, maar volgens mij heb ik bovenstaande diagram helemaal zo verwerkt.
Ik krijg alleen nogsteeds iedere keer errors dat mijn variabelen private zijn, dus die heb ik nu maar even public gemaakt.
Maar nu krijg ik nogsteeds 17 errors :S.
Ik denk dat het opzich allemaal nog niet zo verkeerd is wat ik doe, maar dat ik ergens een denkfout maak die fataal is voor dit script.

Ik heb nu dit:

Code:
public class Personen {
	public String naam;
	public String adres;
	public String postcode;
	public String woonplaats;
	
	 public Personen(String naam, String adres, String postcode, String woonplaats) {
		this.naam = naam;
		this.adres = adres;
		this.postcode = postcode;
		this.woonplaats = woonplaats;
	}
	
	public void setNaam(String nieuweNaam) {
		this.naam = nieuweNaam;
	}
	public String getNaam() {
		return this.naam;
	}
	
	public void setAdres(String nieuwAdres) {
		this.adres = nieuwAdres;
	}
	public String getAdres() {
		return this.adres;
	}
	
	public void setPostcode(String nieuwePostcode) {
		this.postcode = nieuwePostcode;
	}
	public String getPostcode() {
		return this.postcode;
	}
	
	public void setWoonplaats(String nieuweWoonplaats) {
		this.woonplaats = nieuweWoonplaats;
	}
	public String getWoonplaats() {
		return this.woonplaats;
	}
}


public class Medewerker extends Personen {
	
	public int sofinummer;
	public double salaris;
	
	public Medewerker(double salaris, int sofinummer) {
		this.salaris = salaris;
		this.sofinummer = sofinummer;
	}	
	
	public void setSofinummer(int nieuwSofinummer) {
		sofinummer = nieuwSofinummer;
	}
	public int getSofiummer() {
		return sofinummer;
	}
	
	public void setSalaris(double nieuwSalaris) {
		salaris = nieuwSalaris;
	}
	public double getSalaris() {
		return salaris;
	}
}


public class Kok extends Medewerker {
	public boolean kookboek;
	
	public Kok() {
		System.out.println("Ik ben kok en mijn naam is ");
	}
	
	public Kok(String naam, String adres, String postcode, String woonplaats, double salaris, int sofinummer) {
		this.naam = naam;
		this.adres = adres;
		this.postcode = postcode;
		this.woonplaats = woonplaats;
		this.salaris = salaris;
		this.sofinummer = sofinummer;
	}
}


public class Bezorger extends Medewerker {
	public boolean eigenbrommer;
	
	public Kok() {
		System.out.println("Ik ben bezorger en mijn naam is ");
	}
	
	public Bezorger(String naam, String adres, String postcode, String woonplaats, double salaris, int sofinummer) {
		this.naam = naam;
		this.adres = adres;
		this.postcode = postcode;
		this.woonplaats = woonplaats;
		this.salaris = salaris;
		this.sofinummer = sofinummer;
	}

}


public class Klant extends Personen {
	public Klant() {
		System.out.println("Hello, my name is " + naam + " and I'd like to order a sandwich");
	}
	
	public Klant(String naam, String adres, String postcode, String woonplaats) {
		this.naam = naam;
		this.adres = adres;
		this.postcode = postcode;
		this.woonplaats = woonplaats;
	}
}

import java.util.ArrayList;

public class DamascusShoarma {
	private int aantalkoks;
	private int aantalbezorgers;
	private ArrayList<Personen> personenlijst = new ArrayList<Personen>();
		
	public static void main(String[] args) {
		
		personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk"));
		personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk"));
		personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum"));
		personenlijst.add(new Bezorger("Jan", "Rozengracht 488", "1011DS", "Amsterdam"));
		personenlijst.add(new Klant("Amanda", "Commandeurslaan 44", "1962JJ", "Heemskerk"));
		
	}	
}

Het soort errors dat ik nu krijg is zoiets:

--------------------Configuration: inzend3 - JDK version 1.6.0_03 <Default> - <Default>--------------------
C:\Users\Condor\Documents\JCreator LE\MyProjects\Hoofdstuk9\inzend3\DamascusShoarma.java:10: cannot find symbol
symbol : constructor Kok(java.lang.String,java.lang.String,java.lang.String,java.lang.String)
location: class Kok
personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk"));
^

C:\Users\Condor\Documents\JCreator LE\MyProjects\Hoofdstuk9\inzend3\Kok.java:5: cannot find symbol
symbol : constructor Medewerker()
location: class Medewerker
public Kok() {
^

C:\Users\Condor\Documents\JCreator LE\MyProjects\Hoofdstuk9\inzend3\Klant.java:3: cannot find symbol
symbol : constructor Personen()
location: class Personen
public Klant() {
^
17 errors

Process completed.
 
Hier krijg ik geen errors meer:

Code:
import java.util.ArrayList;

public class DamascusShoarma {
    private int aantalkoks;
    private int aantalbezorgers;
    private ArrayList<Personen> personenlijst = new ArrayList<Personen>();
    
    public DamascusShoarma(){
        personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk", 10000.00, 2461357));
        personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk", 10000.00, 1357246));
        personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum", 5000.00, 7654321));
        personenlijst.add(new Bezorger("Jan", "Rozengracht 488", "1011DS", "Amsterdam", 5000.00, 1234567));
        personenlijst.add(new Klant("Amanda", "Commandeurslaan 44", "1962JJ", "Heemskerk"));
    }
    
    public static void main(String[] args) {
        
        
        
    }
}

public class Personen {
	public String naam;
	public String adres;
	public String postcode;
	public String woonplaats;
	
	 public Personen(String naam, String adres, String postcode, String woonplaats) {
		this.naam = naam;
		this.adres = adres;
		this.postcode = postcode;
		this.woonplaats = woonplaats;
	}
	
	public void setNaam(String nieuweNaam) {
		this.naam = nieuweNaam;
	}
	public String getNaam() {
		return this.naam;
	}
	
	public void setAdres(String nieuwAdres) {
		this.adres = nieuwAdres;
	}
	public String getAdres() {
		return this.adres;
	}
	
	public void setPostcode(String nieuwePostcode) {
		this.postcode = nieuwePostcode;
	}
	public String getPostcode() {
		return this.postcode;
	}
	
	public void setWoonplaats(String nieuweWoonplaats) {
		this.woonplaats = nieuweWoonplaats;
	}
	public String getWoonplaats() {
		return this.woonplaats;
	}
}


public class Klant extends Personen {
    
	public Klant(String naam, String adres, String postcode, String woonplaats) {
            super(naam, adres, postcode, woonplaats);
            System.out.println("Hello, my name is " + naam + " and I'd like to order a sandwich");
            
	}
}


public class Medewerker extends Personen {
	
	public int sofinummer;
	public double salaris;
	
	public Medewerker(String naam, String adres, String postcode, String woonplaats, double salaris, int sofinummer) {
            super(naam, adres, postcode, woonplaats);
            this.salaris = salaris;
            this.sofinummer = sofinummer;
	}	
	
	public void setSofinummer(int nieuwSofinummer) {
		sofinummer = nieuwSofinummer;
	}
	public int getSofiummer() {
		return sofinummer;
	}
	
	public void setSalaris(double nieuwSalaris) {
		salaris = nieuwSalaris;
	}
	public double getSalaris() {
		return salaris;
	}
}


public class Bezorger extends Medewerker {
	public boolean eigenbrommer;
	
	public Bezorger(String naam, String adres, String postcode, String woonplaats, double salaris, int sofinummer) {
		super(naam, adres, postcode, woonplaats, salaris, sofinummer);
                System.out.println("Ik ben bezorger en mijn naam is " + naam);
	}

}


public class Kok extends Medewerker {
	public boolean kookboek;
	
	public Kok(String naam, String adres, String postcode, String woonplaats, double salaris, int sofinummer) {
		super(naam, adres, postcode, woonplaats, salaris, sofinummer);
                System.out.println("Ik ben kok en mijn naam is " + naam);
	}
}
 
De oplossing van killermenace is uitstekend. De rede echter waarom je errors kreeg wanneer je die members private maakte zat in je afgeleide klassen. Hoewel je de klassens steeds afleidt van de Persoon klasse, mag je toch niet zomaar vanuit een klant of een kok this.adres = adres doen. Deze variabele zijn immers private members van de persoon klasse en mogen door geen andere klasse aangeroepen worden.
Daarvoor dienen immers de Set en Get functies.
 
Ik heb het allemaal eens doorgekeken.
Die "oplossing" met super() vind ik echt goed gevonden, daar had ik echt nooit opgekomen, verder is er niet erg veel gewijzigd.
Ik was dus toch goed opweg :D.

Nu ga ik de casus-eisen nog even langs;

De volgende methods komen voor in het programma:

a. no-arg constructors en overloaded constructors voor alle instance variabelen in een class
Dit is toch alsvolgt:

Code:
public Kok(String naam, String adres, String postcode, String woonplaats, double salaris, int sofinummer) {
		super(naam, adres, postcode, woonplaats, salaris, sofinummer);
                System.out.println("Ik ben kok en mijn naam is " + naam);
	}

public Kok() {
  // waar dient deze dan voor? wat kan ik hier voor code kwijt? misschien die System.out.println() ?
}

b. getter en setter methods voor alle non static instance variabelen;
Deze heb ik volgens mij (bijna) allemaal wel, maar wat moet ik hiermee.
Is het een idee om toch alle instance-variabelen toch private te maken (dat is wel zo veilig toch?) en dan alle gegevens uit die getters halen?
Als dit een goed idee is, hoe doe ik dat dan? zo (in de DamascusShoarma class):

Code:
mmhhhh nee toch niet, f****ck

c. tevreden() [klant methode, die een tevreden tekst op het scherm zet];
Dit zou ik nog wel met een JOptionPane() kunnen laten verlopen denk ik, of maak ik het me dan te moeilijk?

d. telkoks() [Geeft het totaal aantal koks terug];
Dit kan/moet ik in de main-method doen, toch?

e. getaantalbezorgers() [geeft het totaal aantal bezorgers terug];
Idem

f. bezorgen(Klant a).
Deze method kan ik nog in de class Bezorger zetten:

Code:
public String bezorgen(Klant a) {
   System.out.println("Het product is afgeleverd bij klant" + a.naam) ;
}

Bovenstaande kan ik dan in de main-method aanroepen.
 
Code:
public Kok() {
  // waar dient deze dan voor? wat kan ik hier voor code kwijt? misschien die System.out.println() ?
}

Die is niet nodig. Je hebt al een constructor en die constructor geef je alle variabelen mee.
Als je dan toch wil dat er een System.out.println() komt, dan kan je die, of bij-in de huidig aanwezige constructor doen(zoals ik al had gedaan) of er een aparte functie van maken.

b. getter en setter methods voor alle non static instance variabelen;
Deze heb ik volgens mij (bijna) allemaal wel, maar wat moet ik hiermee.
Is het een idee om toch alle instance-variabelen toch private te maken (dat is wel zo veilig toch?) en dan alle gegevens uit die getters halen?
Als dit een goed idee is, hoe doe ik dat dan? zo (in de DamascusShoarma class):

Je hebt zoals ik het kan zien voor alles waar een get of een set voor nodig is een.
Voor de var "naam" hoef je bijvoorbeeld niet een setter omdat die eigenlijk niet zomaar wijzigt (behalve als de achternaam er ook nog bij komt, dan moet er wel een setter bij)
In de DamascusShoarma class heb je eigenlijk geen vars waar een getter of een setter voor nodig is, omdat het de mainclass is.

c. tevreden() [klant methode, die een tevreden tekst op het scherm zet];
Dit zou ik nog wel met een JOptionPane() kunnen laten verlopen denk ik, of maak ik het me dan te moeilijk?
Aan de class klant een boolean toevoegen
Daar kan je dan ook weer een get/set aan koppelen
Hiervoor kan je dan ook een checkbox voor gebruiken

d. telkoks() [Geeft het totaal aantal koks terug];
Dit kan/moet ik in de main-method doen, toch?

e. getaantalbezorgers() [geeft het totaal aantal bezorgers terug];
Idem
Nee, die hoeft ook niet binnen de mainmethode.
Hier kan je beter gewone methode's voor maken die je apart aan kan roepen.

Je kan die functies dan wel in de main aanroepen ja.

f. bezorgen(Klant a).
Deze method kan ik nog in de class Bezorger zetten:

Code:
public String bezorgen(Klant a) {
   System.out.println("Het product is afgeleverd bij klant" + a.naam) ;
}

Bovenstaande kan ik dan in de main-method aanroepen.

Klopt ja.
Maar dan moet je de klant uit de personenlijst halen.
Code:
System.out.println("Het product is afgeleverd bij klant" + personenlijst.get(positieVanKlant).getNaam());
Want de a.naam kan niet meer hè als hij private is ;)
 
Nog een kleine opmerking over uw constructors. Je doet iets in de aard van:

PHP:
this.adres = adres

waarbij de variabele adres van het type String is. Beter is het als je dit doet:
PHP:
this.adres = new String( adres )
.
Waarom? bij het eerste werk je met een referentie naar de string. Dus als je dit doet:

PHP:
String adres = "BLABLA";
String adres2;
adres2 = adres;
adres.toLowerCase( );

dan zal niet alleen adres maar ook adres2 aangepast worden. m.a.w. zoals je het nu doet zal elke aanpassing van de originele string ook meteen gebeuren in de copy. Dit is natuurlijk niet de bedoeling, Daarom is het de gewoonte van in de constructor de meegegeven variabelen te kopieren naar de overeenkomstige member variabele.

en om terug te komen op
PHP:
public Kok() {
  // waar dient deze dan voor? wat kan ik hier voor code kwijt? misschien die System.out.println() ?
}

Deze moet je hebben vermits dit de noarg-constructor is. en hier kan je eventueel je membervariabelen een default value geven. Het is zeker handig om voor elke string variabelen dit te doen:
PHP:
adres = new String( );
zo ga je null-pointer exceptie voorkomen ( = programma crash ), wanneer je de no-arg constructor gebruikt.
 
btw het is geen goed idee om de damascus klasse als main te nemen. In een goed opgebouwd programma bevat de main 1 functie aanroep die de start van de hoofdklasse zal betekenen. Ik zou de main dus loskoppelen van de Damascus klasse en de get() en set( ) methodes wel schrijven.
 
@bzub
Bedankt voor de info, maar ik begrijp uit de casus dat de DamascusShoarma class de main-class is, dus hou ik dat ook even zo.
Die andere manier van het geven van een waarde aan this.adres heb ik nog niet gehad in de studie.
Ik ga er wel even iets meer over opzoeken, want ik vind het altijd interessant als dingen beter kunnen.
In de case die ik nu moet maken hou ik het echter nog wel even bij de tot nu toe behandelde leerstof.

@All.

Ik heb de tevredenheid van de klant even door Math.random() laten genereren :P.

Code:
public class Klant extends Personen {
	private boolean tevreden;
	private int number;
    
	public Klant(String naam, String adres, String postcode, String woonplaats) {
            super(naam, adres, postcode, woonplaats);
            
            System.out.println("Hello, my name is " + naam + " and I'd like to order a sandwich");
            
            int number = (int) (Math.random() * 5);
            
            if(number > 2) {
            	tevreden = true;
            	System.out.println("Your sandwich tasted delicious");
            } else {
            	tevreden = false;
            	System.out.println("Your sandwich tasted disgusting");
            }
            
	}
}

Ik kan altijd nog kijken of ik dat anders ga doen.

Die telkoks() kom ik niet echt lekker uit.

Code:
public int telKoks() {
		int totaal = 0;
		Kok kok;

		for(int i = 0; i > personenlijst.size()-1; i++){
			if(personenlijst.get(i).equals(kok)){
				totaal++;
			}
		}
		return totaal;
	}

Deze method zet ik denk ik in de class Kok, echter de arraylist personenlijst is niet bekend in deze class.
Maar hoe kan ik in de mainclass dan de return waarde (totaal) aanroepen?

Of moet ik deze method in de main-class zetten en dan in de main-method zoiets:

int telKoks telkoks = new telKoks();
System.out.println("Deze shoarmazaak heeft " + telkoks.aantal + " koks in dienst");

Ditzelfde geldt ook voor getaantalbezorgers().

Ook de method bestelling(Klant a) moet volgens mij in de main-class staan omdat ook deze gebruik dient te maken van de ArrayList personenlijst.

Verder zag ik net nog een boolean eigenbrommer in de class bezorger.
Kan je dit ook gewoon meenemen in de constructor bezorger() en vervolgens een waarde true or false in de personenlijst zetten?
 
@bzub
Bedankt voor de info, maar ik begrijp uit de casus dat de DamascusShoarma class de main-class is, dus hou ik dat ook even zo.
Die andere manier van het geven van een waarde aan this.adres heb ik nog niet gehad in de studie.
Ik ga er wel even iets meer over opzoeken, want ik vind het altijd interessant als dingen beter kunnen.
In de case die ik nu moet maken hou ik het echter nog wel even bij de tot nu toe behandelde leerstof.

@All.

Ik heb de tevredenheid van de klant even door Math.random() laten genereren :P.

Code:
public class Klant extends Personen {
	private boolean tevreden;
	private int number;
    
	public Klant(String naam, String adres, String postcode, String woonplaats) {
            super(naam, adres, postcode, woonplaats);
            
            System.out.println("Hello, my name is " + naam + " and I'd like to order a sandwich");
            
            int number = (int) (Math.random() * 5);
            
            if(number > 2) {
            	tevreden = true;
            	System.out.println("Your sandwich tasted delicious");
            } else {
            	tevreden = false;
            	System.out.println("Your sandwich tasted disgusting");
            }
            
	}
}

Ik kan altijd nog kijken of ik dat anders ga doen.

Die telkoks() kom ik niet echt lekker uit.

Code:
public int telKoks() {
		int totaal = 0;
		Kok kok;

		for(int i = 0; i > personenlijst.size()-1; i++){
			if(personenlijst.get(i).equals(kok)){
				totaal++;
			}
		}
		return totaal;
	}

Deze method zet ik denk ik in de class Kok, echter de arraylist personenlijst is niet bekend in deze class.
Maar hoe kan ik in de mainclass dan de return waarde (totaal) aanroepen?

Of moet ik deze method in de main-class zetten en dan in de main-method zoiets:

int telKoks telkoks = new telKoks();
System.out.println("Deze shoarmazaak heeft " + telkoks.aantal + " koks in dienst");

Ditzelfde geldt ook voor getaantalbezorgers().

Ook de method bestelling(Klant a) moet volgens mij in de main-class staan omdat ook deze gebruik dient te maken van de ArrayList personenlijst.

Verder zag ik net nog een boolean eigenbrommer in de class bezorger.
Kan je dit ook gewoon meenemen in de constructor bezorger() en vervolgens een waarde true or false in de personenlijst zetten?

voor het probleem van telKoks( ). Ofwel kan een static variabele aantal koks in de klasse kok zetten en dan telkens in de constructor ++aantalKoks doen.
Ofwel zet je deze in die Domascus klasse ( is toch het restaurant neem ik aan). Vermits koks werken in een restaurant is het vrij logisch dat wanneer je telkoks() uitvoert dit een functie van het restaurant is.

1 restaurant kan meerdere koks hebben ( -> dus logisch dat je die meerder koks kan tellen).

1 instantie kok heeft 1 kok ( dus onlogisch dat je hier de koks van het restaurant kan tellen, ook omwille van de recyclage van de code is het onzinnig van de telkok functie hier te zetten. )

idem voor die bestelling.
 
Ik kom er echt niet uit.
Ik heb nu dit in de mainclass (DamascusShoarma) :

Code:
import java.util.ArrayList;

public class DamascusShoarma {
	private int aantalKoks;
    private int aantalbezorgers;
    private ArrayList<Personen> personenlijst = new ArrayList<Personen>(); 
    	    
    public DamascusShoarma(){
        personenlijst.add(new Kok("Jonny", "Singel 23", "1234AB", "Heemskerk", 10000.00, 2461357));
        personenlijst.add(new Kok("Berend", "Kleidreef 222", "4321BA", "Beverwijk", 10000.00, 1357246));
        personenlijst.add(new Bezorger("Klaas", "Tulpstraat 45", "6446JF", "Castricum", 5000.00, 7654321));
        personenlijst.add(new Bezorger("Jan", "Rozengracht 488", "1011DS", "Amsterdam", 5000.00, 1234567));
        personenlijst.add(new Klant("Amanda", "Commandeurslaan 44", "1962JJ", "Heemskerk"));
        
    }
    
    public int telKoks() {
		aantalKoks = 0;
		Kok kok;

		for(int i = 0; i > personenlijst.size()-1; i++){
			if(personenlijst.get(i).equals(kok)){
				aantalKoks++;
			}
		}
		return aantalKoks;
	}
    
    public static void main(String[] args) {
        
        DamascusShoarma damascus = new DamascusShoarma();
    }
}

Als ik dit run krijg ik de volgende error:

--------------------Configuration: inzend3 - JDK version 1.6.0_03 <Default> - <Default>--------------------
C:\Users\Condor\Documents\JCreator LE\MyProjects\Hoofdstuk9\inzend3\DamascusShoarma.java:22: variable kok might not have been initialized
if(personenlijst.get(i).equals(kok)){
^
1 error

Process completed.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan