Archief - Java winkel

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.

kunner

Legacy Member
[Java] package practicum16; import java.util.*; public class Klanten11 { /** * - Pastebin.com (overzichtelijker door de highlighting)

of voor de liefhebber :-)


Code:
package practicum16;
import java.util.*;
public class Klanten11 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		klanten koen = new klanten ("Koen");
		Koen.aankoop(7);
		Koen.aankoop(49);
		Koen.aankoop(2);
		Koen.aankoop(19);
		
		detailklant hennie = new detailklant("hennie");
		hennie.aankoop(25);
		hennie.aankoop(16);
		hennie.aankoop(14);
		
		groothandelaar bart = new groothandelaar("bart");
		bart.aankoop(15);
		bart.aankoop(23);
		bart.aankoop(17);
		
		groothandelaar sint = new groothandelaar ("sint",0.3);
		sint.aankoop(14);
		sint.aankoop(56);
		sint.aankoop(46);
		
		System.out.println(moustapha);
		System.out.println(moustapha.totaal());
		System.out.println(bart);
		System.out.println(hennie);
		System.out.println(hennie.totaal);
		System.out.println(sint);
		

	}

}
class klanten{
	protected String naam;
	protected ArrayList <Integer> bedragen=new ArrayList<Integer>();
	protected double totaal=0;
	
	public klanten (String n){
		naam=n;
		
	}
	public void aankoop(int bedrag){
		bedragen.add(bedrag);
	}
	public double totaal(){
	
		for(int i=0;i<bedragen.size();i++){
			this.totaal+=bedragen.get(i);
			
		} return totaal;
	}
	public String toString(){
		return "De naam is " + this.naam + " het totale aankoopbedrag is " + this.totaal;
	}
}
class groothandelaar extends klanten {
	protected double korting;
	public groothandelaar(String n){
		super(n);
		korting =0.1;
	}
	public groothandelaar(String n,double kort){
		super(n);
		korting =kort;
	}
	public double totaal(){
		return (super.totaal()-(korting*super.totaal()));
	}
	
	
}

class detailklant extends klanten{
	
	public detailklant(String n){
		super(n);
	}
	
	public double totaal(){
		int z= (int) Math.random()*bedragen.size();
		bedragen.remove(z);
		return super.totaal();
	}
	public void aankoop(int bedrag){
		super.aankoop(bedrag);
	}
	
	
}

De bedoel is dus een soort van klantendatabase met 3 soorten klanten. De naam van de klanten en een Arraylist van de aankoopbedragen wordt bijgehouden.
De 3 soorten:
Klant --> nix speciaal aan
groothandelaar --> standaard 10 procent korting tenzij anders opgegeven
detailklant --> random toegewezen 1 aankoop gratis

Het probleem ligt hem nu in hoe ik de total aankoopsom kan opvragen ben nog niet echt vertrouwd met super en overerving.
Als ik de klant gwn uitprint krijg ik als aankoopbedrag 0.0.
Als ik echter enkel de klant.totaal uitprint krijg ik wel het juiste bedrag :sad:

Iemand die mij kan helpen?

jackie

Legacy Member
Je toString() methode waar je this.totaal oproept veranderen naar this.totaal().

Ik zou de methode echter een beetje herschrijven.

Code:
protected double getTotaal() {
		double totaal=0;
		for(int i : bedragen){
			totaal += i;
		}
		return totaal;
	}

Ook zou ik u aanraden om een beetje te letten op hoe je uw klasses en methodes noemt (Enkelvoud, hoofdletter), werken met setters/getters.

kunner

Legacy Member
Bedankt nu werkt het al een stuk beter maar nog niet volledig maar dat vind ik wel zelf :-)
Maar wat is nu het verschil tussen mijn this.totaal en mijn this.totaal() ?

jackie

Legacy Member
kunner zei:
Bedankt nu werkt het al een stuk beter maar nog niet volledig maar dat vind ik wel zelf :-)
Maar wat is nu het verschil tussen mijn this.totaal en mijn this.totaal() ?

this.totaal is je variable (die je op 0 hebt gezet).
this.totaal() is je methode (die de variable totaal aanpast).


Jij roept this.totaal op zonder dat de methode totaal() wordt uitgevoerd, waardoor je totaal op de default waarde blijft steken.

Speedyke

Legacy Member
tip: begin u methodes altijd met een werkwoord zodat er geen verwarring kan zijn zoals je nu hebt.

vb: BerekenTotaal()

Recipe4hate

Legacy Member
Kan je de variable totaal niet private maken? (bij C# is protected normaal gezien correct gebruik, maar hij kan deze nog steeds aanroepen uit zijn hoofdklasse?)

Jerre Muesli

Legacy Member
Neen, protected, public of geen access modifier is de enige optie bij overerving.
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