Beginnersvraag

Status
Niet open voor verdere reacties.

tranceftw

Gebruiker
Lid geworden
6 apr 2009
Berichten
149
Ik ben wat aan het leren werken met java maar nu ben ik op een probleem gestoten. Het is de bedoeling dat ik geen gebruik maak van ArrayList of arrays in het algemeen.

Dit is de klasse Wedstrijdoverzicht

Code:
public class Wedstrijdoverzicht
{

private Speler speler1;
private Speler speler2;
private Speler speler3;
private Speler speler4;
private Speler speler5;

private String overzichtspeler1;
private String overzichtspeler2;
private String overzichtspeler3;
private String overzichtspeler4;
private String overzichtspeler5;

public Wedstrijdoverzicht(String speler1, String speler2, String speler3, String speler4, String speler5)
{
    this.speler1 = new Speler(speler1);
    this.speler2 = new Speler(speler2);
    this.speler3 = new Speler(speler3);
    this.speler4 = new Speler(speler4);
    this.speler5 = new Speler(speler5);
    
    overzichtspeler1 = this.speler1.getName() + ": " + this.speler1.getPunten() + " punten";
    overzichtspeler2 = this.speler2.getName() + ": " + this.speler2.getPunten() + " punten";
    overzichtspeler3 = this.speler3.getName() + ": " + this.speler3.getPunten() + " punten";
    overzichtspeler4 = this.speler4.getName() + ": " + this.speler4.getPunten() + " punten";
    overzichtspeler5 = this.speler5.getName() + ": " + this.speler5.getPunten() + " punten";
}

public void drukLijstAf()
{
    System.out.println("De volgende spelers doen mee aan het tornooi. Ernaast staan hun punten!");
    
    System.out.println(overzichtspeler1);
    System.out.println(overzichtspeler2);
    System.out.println(overzichtspeler3);
    System.out.println(overzichtspeler4);
    System.out.println(overzichtspeler5);
    
}

}

Dit is de klasse Speler

Code:
public class Speler
{

private String naam;
private int punten;

public Speler(String geefNaam)
{
    naam = geefNaam;
    punten = 0;
}

public String getName()
{   
    return naam;
}

public int getPunten()
{
    return punten;
}

public void voegPuntToe()
{
    punten++;
}

public void voegPuntenToe(int aantalPunten)
{
    punten = punten + aantalPunten;
}

public void veranderNaam(String replacementNaam)
{
    naam = replacementNaam;
}
}

De bedoeling is om een methode te maken die een bepaalde speler eruit kan kiezen en de naam ervan kan veranderen. Ik heb deze methode al gemaakt in de klasse Speler, dus moet hij alleen nog opgeroepen worden vanuit de klasse Lijst. Wat mij hierbij dus niet lukt is om een bepaalde speler te selecteren. Ik wil dus dat er niet in de broncode van die methode staat van welke speler de naam wordt veranderd, maar dat je dat nog moet ingeven als parameter ofzo als je de methode oproept, wanneer je een instantie hebt gemaakt van Lijst(ik werk met Bleuj).

Dit is mijn eerste vraag op dit forum :-)

Het zou heel vriendelijk zijn als ik geholpen werd. Bijna iedereen op dit forum kan dit waarschijnlijk oplossen aangezien ik nog maar een echte beginner ben

groetjes
 
je kunt het misschien wat efficienter oplossen door een arraylist te gebruiken.

je voegt eerst alles spelers toe aan een arraylist of je kunt hem zelfs mee geven als parameter en daar kun je over heen itereren.

hiervoor dien je alleen het wedstrijdschema te veranderen
Code:
public class Wedstrijdoverzicht {

private List spelers;

public Wedstrijdoverzicht(String speler1, String speler2, String speler3, String speler4, String speler5) {
	List spelers = new ArrayList();
	this.spelers.add(new Speler(speler1));
	this.spelers.add(new Speler(speler2));
	this.spelers.add(new Speler(speler3));
	this.spelers.add(new Speler(speler4));
	this.spelers.add(new Speler(speler5)); 
}


public drukLijstAf() {
	System.out.println("De volgende spelers doen mee aan het tornooi. Ernaast staan hun punten!");

	Iterator it = this.spelers.iterator();
	while (it.hasNext()) {
		Speler speler = (Speler)it.next();
		System.out.println(speler.getName() + ": " + speler.getPunten() + "punten");
	}
}

wil je nu bijvoorbeeld een naam opzoeken dan kun je die vergelijken met string

Code:
public zoeknaam(String naam) {
	Iterator it = this.spelers.iterator();
	while (it.hasNext()) {
		Speler speler = (Speler)it.next();
		if (speler.getName().equals(naam)) {
			System.out.println(speler.getName() + ": " + speler.getPunten() + "punten");
		}
	}
}

Ik heb je post verkeerd gelezen...

Je kunt ook HashTable gebruiken... of mag je geen enkele collection vorm gebruiken?
 
Laatst bewerkt:
Nee, zo is het goed, ik wou eerst geen ArrayList gebruiken omdat ik dan niet een willekeurige uit de lijst kon kiezen, maar dat probleem heb je nu perfect opgelost met de tweede code.

Bedankt!
 
Ok, bedankt maar kzit nog maar net in het begin van men boek over java dus ga ik nog even wachten met die hashTable... Kheb hem wel al bekeken en kdenk hem wel te snappen, maar kheb nog veel te veel problemen om daar al aan te beginnen. Kheb namelijk nu weeral een nieuw probleem en kben volgens mij al 2 uur aan het proberen zonder resultaat.

De opgave is dus eigenlijk om een methode te implementeren die moet noemen: public int joinedInMonth(int month) en hij moet het aantal mensen returnen die van de maand zijn die je ingeeft bij (int month). De methode moet geimplementeerd worden in de klasse Club.

Ik heb met dit onderwerp een algemeen probleem dus als je algemene informatie kon geven, hielp je me nog verder.

Het komt hierop neer:

Je voegt een object aan van de klasse Membership (in Club met de methode add van de arraylist.) Maar hoe kun je dan de gegevens die je ingegeven hebt bij het maken van dat object, dus month, year en name terugzoeken en dus zoalshet in de oefening moet het aantal mensen zeggen van die maand (month).

Klasse club:

Code:
import java.util.ArrayList;

public class Club
{
    private ArrayList membership;
    private int speci;

    /**
     * Constructor voor objecten van de klasse Club
     */
    public Club()
    {
        membership = new ArrayList();
        speci = new Membership();

    }

    /**
     * Voeg een nieuw lid to aan de ledenlijst.
     * @param member Het lid dat toegevoegd moet worden.
     */
    public void join(String name, int month, int year)
    {
        membership.add(new Membership(name,month,year));
    }

    /**
     * @return Het aantal leden (objecten van het type Membership) van
     *         de club.
     */
    public int numberOfMembers()
    {
        return membership.size();
    }
}

Klasse Membership

Code:
/**
 * Sla details van een lidmaatschap van een club op.
 *
 * @author David J. Barnes and Michael Kolling
 * @version 2003.01.10
 */
public class Membership
{
    // De naam van het lid.
    private String name;
    // De maand waarin het lidmaatschap aangegaan is.
    private int month;
    // Het jaar waarin het lidmaatschap aangegaan is.
    private int year;

    /**
     * Constructor voor objecten van de klasse Membership.
     * @param name De naam van het lid.
     * @param month De maand waarin het lidmaatschap aangegaan is. (1 ... 12)
     * @param year Het jaar waarin het lidmaatschap aangegaan is.
     */
    public Membership(String name, int month, int year)
        throws IllegalArgumentException
    {
        if(month < 1 || month > 12) {
            throw new IllegalArgumentException(
                "Maand " + month + " 'out of range'. Moet liggen in het bereik 1 ... 12");
        }
        this.name = name;
        this.month = month;
        this.year = year;
    }

    /**
     * @return De naam van het lid.
     */
    public String getName()
    {
        return name;
    }

    /**
     * @return De maand waarin het lidmaatschap aangegaan is. (1 ... 12)
     */
    public int getMonth()
    {
        return month;
    }

    /**
     * @return Het jaar waarin het lidmaatschap aangegaan is.
     */
    public int getYear()
    {
        return year;
    }

    /**
     * @return A representatie in String-vorm van dit lidmaatschap.
     */
    public String toString()
    {
        return "Naam: " + name +
               " lid geworden in maand " +
               month + " van " + year;
    }
}
 
Ik zou zeggen doe het stapje voor stapje.

je hebt dus je joininmonth method waarin je in het begin zeker weet dat je 0 inschrijvingen hebt..

nu loop je door de arraylist heen. Anders gezegd itereer.. zie vorige script wat ik je gestuurd heb.

vergelijk dan de maand van de member met de maand die je als parameter hebt megegeven. iedere keer als je dus een member tegen komt met dezelfde maand wordt er 1 bij opgeteld

en op het einde retouneer je deze waarde.

Ik hoop dat je hier uitkomt zonder dat ik voorbeeld code voor je schrijf.
 
Mag ik je hierover mailen? Of heb je msn ofso? Dan kan je me desnoods achteraf weer verwijderen, maar ik zou graag een paar korte vraagjes stellen en dat is handiger met msn.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan