Probleem hoogste aantal

Status
Niet open voor verdere reacties.

NewbiProgrammer

Gebruiker
Lid geworden
18 okt 2009
Berichten
264
Hallo, ik moet voor school een opdrachtje maken en nu loop ik een beetje vast. Het programma doet het opzich gewoon goed. Alleen hij presenteert de verkeerde "beste gast" in die methode zit dus de fout. Ik zal alle code hier even neerplakken zodat je een algemeen beeld krijgt van het programma (als het nodig is).

Apl:
Code:
public class Apl {
	public static void main(String[] args) {
		Hotel hotel = new Hotel();

		// argumenten: kamernummer, type, verdieping
		hotel.addKamer(12, "normal", 1);
		hotel.addKamer(13, "economy", 1);
		hotel.addKamer(32, "luxury", 2);
		hotel.addKamer(24, "honeymoonsuite", 2);
		hotel.addKamer(3, "normal", 0);

		hotel.addGast("Gerd Vuuren","Heuvelrug 28, Boekelo");
		hotel.addGast("Jan de Sickenvas", "Dalstraat 11, Enschede");
		hotel.addGast("Arend Reiselief", "Hoogsingel 41, Hengelo");
		hotel.addGast("Toos Loemsant", "Tussenweg 3, Almelo");
		
		hotel.registreer("Toos Loemsant", 32);
		hotel.registreer("Jan de Sickenvas", 12);
		
		System.out.println("===================================");
		System.out.println("Gegevens van kamer 12:");
		hotel.drukAfKamerGegevens(12);
		
		System.out.println("===================================");
		System.out.println("Lege kamers:");
		hotel.drukAfLegeKamers();
		
		System.out.println("===================================");
		System.out.println("Bedrijfsresultaat:");
		hotel.drukAfWinst();
		
		hotel.schrijfUit("Jan de Sickenvas");
		System.out.println("===================================");
		System.out.println("Gegevens van kamer 12:");
		hotel.drukAfKamerGegevens(12);
		
		hotel.registreer("Jan de Sickenvas", 13);
		System.out.println("===================================");
		System.out.println("Beste gast:");
		hotel.drukAfBesteGast();
		 
	}

Hotel:
Code:
import java.util.*;
import java.io.*;
import java.net.*;

public class Hotel
{
    private ArrayList<Kamer> kamerlijst = new ArrayList<Kamer>(); //nieuwe arraylist van kamers
    private ArrayList<Gast> gastenlijst = new ArrayList<Gast>(); //nieuwe arraylist van gasten
    private int nummertje = 0;
    private int kamernummer = 0;
    
   public void addKamer(int kamernummer, String type, int verdieping ) {  //voeg kamer toe functie.
       Kamer kamer = new Kamer(kamernummer, verdieping, type);
       if( type.equalsIgnoreCase( "luxury" ) || type.equalsIgnoreCase( "honeymoonsuite" ) || type.equalsIgnoreCase( "normal" ) || type.equalsIgnoreCase( "economy")) {
       kamerlijst.add( kamer );
       }
    }
    
    public void addGast(String naam, String adres) { //voeg gast toe functie
        Gast gast = new Gast(naam, adres);
        gastenlijst.add( gast );
    }
    
    public void registreer(String naam, int kamernummer) {
       Gast gast = getGast( naam);
        for( Kamer k : kamerlijst ) {
            if(kamernummer == ( k.getKamernummer() )) {
                k.setGast( gast );
            }
        }
    }
   
    public void drukAfKamerGegevens(int nummertje) {     //deze methode drukt de kamergegevens af.
        for( Kamer k : kamerlijst ) {
            if( nummertje == ( k.getKamernummer() )) {
                System.out.println( k.toString() );
            }
        } 
    }   
    
    public void drukAfLegeKamers() {
        for( Kamer kamer : kamerlijst ) {
            if( kamer.isLeeg() == true ) {
                System.out.println("nr. " + kamer.getKamernummer() + " op verdieping " + kamer.getVerdieping() + ", type: " + kamer.getType() + "\n\t (leeg)" );
            }
        }
    }
    
    public void schrijfUit( String naam ) {
        for(Kamer k : kamerlijst ) {
            if( k.heeftGast( naam ) ) {
                k.schrijfGastUit();
            }
        }
    }
    
    public Gast getGast(String naam){
        for(Gast gast : gastenlijst ) {
            if(gast.getNaam().equalsIgnoreCase(naam)) {
                return gast;
            }
        }
        return null;
    }

    public void drukAfBesteGast() {
        int maxAantal = -1;
        Gast besteGast = null;
        for(Gast g : gastenlijst) {
            if(g.getAantalBezoeken() > maxAantal) {
                maxAantal = g.getAantalBezoeken();
                besteGast = g;
            }
            if( besteGast != null ) {
                System.out.println(besteGast.toString());
            }
        }
    }
    
    public double winst() {    
        double winst = 0;
        for(Kamer kamer : kamerlijst ) {
            if(kamer.isLeeg() == false ) {
                if(kamer.getType().equalsIgnoreCase("luxury")){
                    winst += (40.75);
                }
                if(kamer.getType().equalsIgnoreCase("honeymoonsuite")){
                     winst += (55);        
                }
                if(kamer.getType().equalsIgnoreCase("normal")){
                    winst += (28.25);
                }
                if(kamer.getType().equalsIgnoreCase("economy")){ 
                     winst += (24.30);
                }
            }else{
            if(kamer.isLeeg() == true) {
                 winst += (-10.50);
            }
        }
    }
    return winst;
   }

   public void drukAfWinst() {
       System.out.println( "Totale winst is EUR " + winst() );
    }
}

Kamer:
Code:
public class Kamer
{
    private int kamernummer;
    private int verdieping;
    private String type;
    private Gast gast;

    public Kamer(int kamernummer, int verdieping, String type) {
        this.kamernummer = kamernummer;
        this.verdieping = verdieping;
        this.type = type;
    }
    
    public void setGast(Gast gast){
        this.gast = gast;
    }
    
    public boolean isLeeg() {
        return gast == null;
    }
        
    public int getKamernummer() {
        return kamernummer;
    }
    
    public String getType() {
        return type;
    }
    
    public int getVerdieping() {
        return verdieping;
    }
    
    public boolean heeftGast(String naam){
        if(isLeeg()) {
            return false;
        }
        return (gast.getNaam().equalsIgnoreCase(naam));
    }
    
    public void schrijfGastUit(){
        gast = null;
    }
    
    public String toString() {
        String alles = ("Kamern nr. " + kamernummer + " op verdieping " + verdieping + ", type: " + type);
        if(gast == null){
            alles += "\n\t(leeg)";
        }else {
            alles += "\n\t" + gast.toString(); 
        }
        return alles;
    }
}

Gast:
Code:
/**
 * Write a description of class Gast here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Gast
{
    private String naam;
    private String adres;
    private String woonplaats;
    public int aantalBezoeken;
    
    public Gast(String naam, String adres) {
        this.naam = naam;
        this.adres = adres;
    }
    
    public String getNaam() {
        return naam;
    }
    
    public void verhoogBezoek() {
        aantalBezoeken = 0;
        aantalBezoeken++;
    }
    
    public int getAantalBezoeken() {
        return aantalBezoeken;
    }
    
    public String toString() {
        return ( "Gast: " + naam + ", " + adres );
        
    }
}

Als je de Apl bekijkt moet er als beste gast uitkomen: Jan de Sickenvas, maar bij mij komt er Gerd Vuuren uit.

M.v.g
Bram
 
Ik zie in dit stukje code:

Code:
        for(Gast g : gastenlijst) {
            if(g.getAantalBezoeken() > maxAantal) {
                maxAantal = g.getAantalBezoeken();
                besteGast = g;
            }
            if( besteGast != null ) {
                System.out.println(besteGast.toString());
            }
        }

dat bij iedere herhaling van de for lus:

Code:
            if( besteGast != null ) {
                System.out.println(besteGast.toString());
            }

uitgevoerd wordt, hoort dit soms niet buiten de for lus?
Dit viel me op... ik weet niet of dat ook je probleem soms oplost?
 
Bedankt voor je snelle reply. Het lost alleen op dat hij niet elke keer weer de naam uitprint dus dat er niet 4 keer "De beste gast" komt te staan, was ook nog 1 dingetje die ik moest oplossen. maar het "echte" probleem heeft het nog niet opgelost.
 
Print in de drukAfBesteGast functie eens af hoeveel bezoeken elke gast heeft gedaan.
Dus dat je ziet Gerd Vuuren: zoveel keer; Jan de Sickenvas: zoveel keer; Arend Reiselief: etc, etc.
Dan zie je waarschijnlijk wel waarom Jan de Sickenvas niet als beste gast uit de bus komt.
 
Bedankt voor je antwoord ik ben tot de oplossing gekomen ). Ik was vergeten de verhoogBezoek functie toe te voegen aan de registreer functie, waardoor hij het aantalbezoeken niet verhoogde :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan