help!! problemen met het optellen van een waarde uit een class

Status
Niet open voor verdere reacties.

johnstuck

Gebruiker
Lid geworden
22 okt 2013
Berichten
10
Hallo mensen ik zal het maar kort houden.
Ik moet een manier verzinnen om een waarde uit een class bij elkaar op te tellen.

Het gaat hier om een simpel systeem waarbij leerlingen zich kunnen in en uitschrijven maar er moet binnen het systeem ook de mogelijkheid zijn om te zien hoeveel mensen een dezelfde leeftijd hebben.

Ik gebruik 2 classes school,leerling bij school voeg ik de leerling toe die ik heb aangemaakt via de leerling class die de volgende gegevens heeft:

(ik geef elke leerling ook een apart ovnummer)

ovnummer;
naam;
tussenvoegsel;
achternaam;
geslacht;
leeftijd;
geboortedatum;

deze word samen 1 object die ik toevoeg in het object school

dan print ik deze uit via println en krijg ik netjes alle gegevens van de leerlingen via mijn eigen geschreven code

Maar ik zoek nu dus een manier om de leeftijd van de toegevoegde leerlingen te bekijken. Dus bijvoorbeeld hoeveel leerlingen zijn 16 jaar?
Dit was mijn begin code
Code:
       public Leerling zoek_op_leeftijd ( int leeftijd ) {
        Leerling gezochteLeerling2 = null;
        for( Leerling lid : lijst){
            if( lid.getLeeftijd() == leeftijd )
              gezochteLeerling2 = lid;    
        }
        return gezochteLeerling2; 
    }
dit laat het volgende zien:

1.png

Hier tik je een leeftijd in bijvoorbeeld (16)

daarna als het gevonden is krijg je dit resultaat anders (null)
2.png


zoals je ziet het werkt het want als ik verder klik geeft hij inderdaad de gevonden leerling aan.
Maar nu wil ik het zegmaar hebben dat hij optelt hoeveel leerlingen van dezelfde leeftijd gevonden zijn.
 

Bijlagen

  • 1.png
    1.png
    20,5 KB · Weergaven: 15
Laatst bewerkt:
Welkom op Helpmij :thumb:

Javascript is een andere taal dan Java, ik heb je vraag verplaatst :)
 
Kun je dat niet met een counter doen?
(ik heb jouw codevoorbeeld gekopieerd)

[cpp]int c = 0;
for( Leerling lid : lijst){
if( lid.getLeeftijd() == leeftijd ){c++;}
}
return c;[/cpp]

?
 
Je returned nu 1 leerling (dat staat direct na public), wat je wilt returnen is een getal (int) van het aantal leerlingen
Verander dus je methode zodat hij een int teruggeeft, en in je for loop tel je de int steeds op.
Zoals het volgende voorbeeld illustreerd:


Code:
 public int zoek_op_leeftijd ( int leeftijd ) {
        int aantal_leerlingen = 0;
        for( Leerling lid : lijst){
            if( lid.getLeeftijd() == leeftijd )
              aantal_leerlingen++;   
        }
        return aantal_leerlingen; 
    }
 
Ontzettend bedankt voor het reageren iedereen

Het is gelukt!

nou wil ik als laatst de leerlingen die in de object van de class staan ingeschreven (toegevoegd) overzetten naar een nieuwe class genaamd: klas.

Ik heb nu zeg maar
dat de class leerling -> naar de class school gaat. de class school bepaalt wie er word toevoegd of word uitgeschreven.
en dan wil ik de toegevoegde leerlingen van de class school overzetten naar de class klas2A

dan zou je zoeits als dit krijgen:

6.png


mijn plan was om dit te gaan doen op basis van een nummer (elke leerling heeft een apart nummer)
Zie 1ste post de lijst met gegevens

Ik wil dus dat er een scherm tevoorschijn komt en dat je het gewenste nummer intikt en de leerling die al toegevoegd was in de class school dan ook word toegevoegd in de klas op basis van nummer.

Kort verteld ik wil dus van de class school een functie maken die ervoor zorgt dat ik ervoor kan kiezen welke leerling ik toevoeg in de class (Klas) op basis van ovnummer

leerlingen (bron) -> school (database) -> klas (leerlingen van de database)

Alleen weet ik niet zo snel hoe ik dit gemakkelijk zou kunnen doen...

code die ik gebruik voor het toevoegen van de leerlingen aan de class (school)
Code:
public void Schrijf_een_leerling_in (Leerling lid) {
        lijst.add(lid);
    }
 
Laatst bewerkt:
Snap het volgens mij niet helemaal maar ik zal een poging doen.

Je hebt nu dus in "school" een array met leerlingen?
En die wil je verplaatsen naar klas op basis van OV nummer?

Dan krijg je in klas iest als iets als:

[CPP]
ArrayList<Leerling> leerlingen = new ArrayList<Leerling>();

public void leerlingToevoegen(Leerling student){
if (!(student == null)){
leerlingen.add(student);
}
}
[/CPP]


en in school:

[CPP]Klas wiskunde = new Klas();

public void leerlingToevoegen(int OVnummer){
wiskunde.leerlingtoevoegen(getLeerlingByOVnummer(OVnummer));
}

private Leerling getLeerlingByOVnummer(int nummer){
for(Leerling lid: lijst){
if(lid.getOVnummer() == nummer){
return lid;
}
}

return null;
}[/CPP]


heb het even voor je uitgewerkt in eclipse (er zitten ook losse .java bestanden bij):

http://www.mediafire.com/folder/74a57ggja6bwv/Helpmij_optellen_leerlingen
 
Laatst bewerkt:
Super! ontzettend bedankt
Dat is precies wat ik bedoelde :)

morgen maar eens even afmaken met frisse moed
 
Hallo beste mensen ik zit nog met een laatste probleem

Ik wil zegmaar zoals de titel al zegt de leeftijd laten berekenen door een hardcoded jaartal

dus in dit geval 2013

dan wil ik iets hebben zoals dit een hardcoded jaartal

Private int jaartal; (2013)
en dat de het geboorte jaar die je dus invult bij de leerlingen de leeftijd laat berekenen.

zodat ik bij de leerling niet meer de leeftijd hoef in te vullen maar dat het automatisch word berekend
 
Zoiets als dit?

Code:
private final int ditJaar = 2013; //hier kun je ook de huidige datum gebruiken (kijk eens naar de Date / Calendar klasse).

...

int leeftijd = ditJaar - Integer.parseInt(mijnTextVeld.getText());
student.setLeeftijd(leeftijd);
 
ongeveer ja

mijn code is dit uit classe: Leerling (waar ik dus de gegevens invoer)

Code:
public class Leerling {

    private int ovnummer;
    private String naam;
    private String tussenvoegsel;
    private String achternaam;
    private String mijnTextVeld;
    private String geslacht;
    private int leeftijd;
    private String geboortedatum;
    private int ditJaar = 2013;

    //constructor
    
    
    public Leerling(int ovnummer,String naam,String tussenvoegsel,String achternaam, String geslacht,int leeftijd,String geboortedatum){
        this.ovnummer = ovnummer;
        this.naam = naam;
        this.tussenvoegsel = tussenvoegsel;
        this.achternaam = achternaam;
        this.geslacht = geslacht;
        this.leeftijd = Jaar;
        this.geboortedatum = geboortedatum;
        

    }

    
    public void getInfo(){
		 System.out.println(ovnummer +" "+ naam +" "+ tussenvoegsel +" "+ achternaam +" "+ geslacht +" "+ leeftijd +" "+ geboortedatum );
	}
	
    public String getNaam() {
        return naam;
    }
    
  public String getTussenvoegsel() {
        return tussenvoegsel;
    }
    
    public String getAchternaam() {
        return achternaam;
    }
    
    public int getLeeftijd() {
        return leeftijd;
    }
    
    public int getOvnummer() {
        return ovnummer;
    }
    
    public String getGeboortedatum() {
        return geboortedatum;
    }

    public void setNaam ( String naam) {
        this.naam = naam;
    }

    public void geslacht ( String geslacht) {
        this.geslacht = geslacht;
    }

    public String getGeslacht() {
        return geslacht;
    }
   
}

ik wil het aanpassen dat inplaats van dat je een leeftijd op geeft het jaartal opgeeft wanneer een leerling is geboren en wanneer dat ingetikt is dat ik dat met een een public int kan laten returnen (dat ie automatisch heeft berekend de leeftijd dus bijv: leerling 1 = 1993 (2013-1993) (leerling is 20 jaar)

(ik heb nog in deze code staan dat je de leeftijd zelf moet invoeren maar dat haal ik weg en wil ik via deze nieuwe methode kunnen aanpassen)
 
Laatst bewerkt:
In de leerling classe:

[CPP]public int getCalculatedLeeftijd(){
return (Calendar.getInstance().get(Calendar.YEAR)) - getGeboortedatum();
}[/CPP]

Echter loop je nu tegen het probleem aan dat je niet naar de maand en dag kijkt, waardoor de leeftijd dus niet accuraat is.
Je lost dat zo op:

1. Je maakt van geboortedatum een datum
2. Je geeft de datum in op een manier als volgt: 13/12/1992, en vervolgens splits je op de / (.split("/")) om achter het jaar, de maand en de dag te komen
 
"Sluiten" heb je zelf al gedaan door op "Zet status opgelost" te klikken ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan