[informatica] arraylist in andere classe gebruiken en printen

Moderators: ArcherBarry, Fuzzwood

Berichten: 35

arraylist in andere classe gebruiken en printen

hallo

Voor velen zal dit waarschijnlijk te gemakkelijk zijn of zal er verkeerde syntax gevonden zijn ,maar ik volg het eerste jaar java in avondonderwijs wat betekent nu in totaal 20 avondjes van 3u

Het probleem zit hem dat ik een arraylist wil benaderen vanuit een andere klasse en deze verder uitprinten.

Maar wat ik ook probeer ik krijg de list niet uitgeprint.

hieronder een deel van de noodzakelijke klasse.

het gaat hem vooral over de klasse GeUitprinten.

Dus de bedoeling is dat er eerste optie 1 gekozen wordt en de nodige gegevens ingevuld worden.

Dan zou optie 3 moeten gekozen moeten worden en de arraylist uitprinten maar dit gebeurd niet.

Dus optie 1 werkt perfect als ik 1 of meerdere studenten wens in te geven,maar het benaderen van de arraylist vanuit de ander klasse en daar uitprinten werkt niet

Code: Selecteer alles


package Leden;

public class Start {

/**

  * @param args

  */

public static void main(String[] args) {

  // TODO Auto-generated method stub

  StartProgram go = new StartProgram();

  go.Start();

  }

}

Code: Selecteer alles


package Leden;

import java.util.Scanner;

public class StartProgram {

public void Start() {

  int x = 0;

  Scanner leesin = new Scanner(System.in);

  while (x < 5) {

   System.out.println("Wat wenst u te doen");

   System.out.println("");

   System.out.println("1: maak nieuwe cursist aan");

   System.out.println("2: verwijder cursist");

   System.out.println("3: print lijst uit");

   System.out.println("4: zoek in de lijst");

   System.out.println("5: beeindig");

   int y = leesin.nextInt();

   if (y == 1) {

GeOpvragen go = new GeOpvragen();

go.GeGevensOpvragen();

   }

   if (y == 2) {

// GeVerwijder gv = new GeVerwijder();

// gv.wis();

   }

   if (y == 3) {

GeUitprinten gu = new GeUitprinten();

gu.printuit();

   }

   if (y == 4) {

GeZoeken gz = new GeZoeken();

gz.zoekwoord();

   }

   if (y == 5) {

x = 5;

   }

  }

  leesin.close();

}

}

Code: Selecteer alles


package Leden;

import java.util.Scanner;

public class GeOpvragen {

Scanner leesin = new Scanner(System.in);

GeBewaren gb = new GeBewaren();

private int x;

public void GeGevensOpvragen() {

  System.out.println("Hoeveel Student(en) wenst u aan te maken?");

  x = leesin.nextInt();

  if (x == 1) {

   System.out.println("U wenst " + x + " student aan te maken");

  } else {

   System.out.println("U wenst " + x + " studenten aan te maken");

  }

  for (int i = 0; i < x; i++) {

   System.out.println("Geef de naam van de student");

   String naam = leesin.next();

   System.out.println("Geef de familienaam van de student");

   String famnaam = leesin.next();

   System.out.println("Geef de leeftijd van de student");

   int leeftijd = leesin.nextInt();

   GeCursist tempcursist = new GeCursist(naam, famnaam, leeftijd);

   System.out.print("U gaf volgdende gegevens in : ");

   System.out.println(tempcursist);

   System.out.println("");

   gb.voegToeCursist(tempcursist);

  }

}

}

Code: Selecteer alles


package Leden;

import java.util.ArrayList;

public class GeBewaren {

/*

  * dit dient om de cursisten in een array list te steken omdat dit niet

  * de taak is van de classe cursist

  */

 private ArrayList<GeCursist> mijnlijst;

public GeBewaren() {

  super();

  mijnlijst = new ArrayList<GeCursist>();

}

  

public void voegToeCursist(GeCursist tempcursist) {

  mijnlijst.add(tempcursist);

}

public void verwijderCursist() {

  mijnlijst.remove(mijnlijst);

}

/*public void printLijst() {

  for (GeCursist x : mijnlijst) {

   //if(x.getLeeftijd() > temp)

   if (x.getNaam().equals("gianni")) {

  System.out.println(x.getNaam());

  }

  }

}

*/

public ArrayList<GeCursist> getMijnlijst() {

  return mijnlijst;

}

  }

Code: Selecteer alles


package Leden;

public class GeCursist {

private String naam;

private String famnaam;

private int leeftijd;

@Override

public String toString() {

  return "GeCursist [naam=" + naam + ", famnaam=" + famnaam

+ ", leeftijd=" + leeftijd + "]";

}

public GeCursist() {

  super();

}

public GeCursist(String naam, String famnaam, int leeftijd) {

  super();

  this.naam = naam;

  this.famnaam = famnaam;

  this.leeftijd = leeftijd;

}

public String getNaam() {

  return naam;

}

public String getFamnaam() {

  return famnaam;

}

public int getLeeftijd() {

  return leeftijd;

}

}

Het gaat om deze klasse

Code: Selecteer alles


package Leden;

import java.util.ArrayList;

public class GeUitprinten {

GeBewaren print = new GeBewaren();

public void printuit() {

  ArrayList<GeCursist> lijst = print.getMijnlijst();

  for (GeCursist x : lijst) {

   System.out.println(x.getNaam());

   System.out.println(x.getFamnaam());

   System.out.println(x.getLeeftijd());

  

//{

//  ArrayList<GeCursisten> lijst = print.getMijnlijst();

   // for(int i = 0; i < lijst.size(); ++i)

   // System.out.println(lijst.get(i));

  // }

   }

}

}

mvg b

Gebruikersavatar
Pluimdrager
Berichten: 6.591

Re: arraylist in andere classe gebruiken en printen

Ik heb een e-mail gestuurd naar een gebruiker op dit forum met de naam Jan Wiegers,

Deze meneer weet heel veel van de taal java af.

Ik hoop voor je dat hij zal reageren op je topic.

Berichten: 35

Re: arraylist in andere classe gebruiken en printen

waarvoor dank :-)

mvg b,

Gebruikersavatar
Berichten: 7.390

Re: arraylist in andere classe gebruiken en printen

Code: Selecteer alles

 if (y == 1) {

	    GeOpvragen go = new GeOpvragen();

	    go.GeGevensOpvragen();

   }

   if (y == 2) {

	    // GeVerwijder gv = new GeVerwijder();

	    // gv.wis();

   }

   if (y == 3) {

	    GeUitprinten gu = new GeUitprinten();

	    gu.printuit();

   }

   if (y == 4) {

	    GeZoeken gz = new GeZoeken();

	    gz.zoekwoord();

   }

   if (y == 5) {

	    x = 5;

   }


Dit kan je toch beter met een switch/case doen?
"C++ : Where friends have access to your private members." Gavin Russell Baker.

Berichten: 35

Re: arraylist in andere classe gebruiken en printen

In physics I trust schreef: za 23 mar 2013, 12:53
Dit kan je toch beter met een switch/case doen?
hallo

ik heb al gelezen over de switch maar we hebben deze nog niet gezien in de les.

Ik zou graag eerste het programma laten werken zoals het hoort en dan als ik nog tijd over heb de code verbeteren.

ik heb gisteren nog tot 2u s'nachts zitten proberen en vanmorgen stelde ik me de vraag of hij überhaupt wel de waardes wegschrijft in de arraylist.

Dus nu eerst eens zoeken hoe ik dit kan testen ;-)



o wat is java leuk :-)

mvg b,

Berichten: 7.068

Re: arraylist in andere classe gebruiken en printen

rcb8dboy schreef: vr 22 mar 2013, 22:23

Code: Selecteer alles


   ...

   if (y == 3) {

	GeUitprinten gu = new GeUitprinten();

	gu.printuit();

   }

Je maakt hier een nieuw object GeUitprinten aan en roept dan meteen de methode printuit aan.

Code: Selecteer alles


package Leden;

import java.util.ArrayList;

public class GeUitprinten {

GeBewaren print = new GeBewaren();

public void printuit() {

  ArrayList<GeCursist> lijst = print.getMijnlijst();

  ...

Bij het aanmaken van het nieuwe object GeUitprinten maak je een nieuw object GeBewaren aan. Het GeBewaren object bevat geen informatie. Als je hier dan meteen getMijnLijst() op toepast dan komt daar natuurlijk niks uit.

Gebruikersavatar
Berichten: 7.390

Re: arraylist in andere classe gebruiken en printen

Volgens mij zit er niets in de lijst die je laat uitprinten, en is er weinig fout met je code.

Ik heb ze even aangepast op volgende manier, en dan wordt er wel degelijk iets afgedrukt. Het komt dus omdat je een nieuw (en dus leeg) object aanmaakt.

Code: Selecteer alles

package Leden;

import java.util.ArrayList;

public class GeUitprinten {

GeBewaren print = new GeBewaren();

public void printuit() {

  System.out.println("test");

  GeCursist tempcursist = new GeCursist("voornaam", "name", 21);

  print.voegToeCursist(tempcursist);

  ArrayList<GeCursist> lijst = print.getMijnlijst();

  for (GeCursist x : lijst) {

   System.out.println(x.getNaam());

   System.out.println(x.getFamnaam());

   System.out.println(x.getLeeftijd());

//{

//  ArrayList<GeCursisten> lijst = print.getMijnlijst();

  

   // for(int i = 0; i < lijst.size(); ++i)

   // System.out.println(lijst.get(i));

  // }

   }

}

}
"C++ : Where friends have access to your private members." Gavin Russell Baker.

Berichten: 7.068

Re: arraylist in andere classe gebruiken en printen

Volgens mij zit er niets in de lijst die je laat uitprinten, en is er weinig fout met je code.
Dat eerste deel daar ben ik het mee eens (natuurlijk gezien mijn eerdere post). Het tweede deel vind ik een discussiepunt. Er wordt van veel te veel klasses gebruik gemaakt. Mijn inziens zouden er maximaal 3 moeten zijn: Cursist, Cursus en Programma.

Berichten: 35

Re: arraylist in andere classe gebruiken en printen

hallo

In eerste instantie zit er inderdaad niets in de lijst dit klopt.

Gezien ons beginner niveau moet ik daar later ook nog een foutcontrole op doen.

Maar wat ik nu doe om te testen is als ik het programma opstart begin met optie 1

Dan word er een nieuwe cursist aangemaakt.

als ik daarna optie 3 neem zou hij deze toch moeten uitprinten?

Ik heb op de klasse GeBewaren een getter gezet.

Dan vanuit de klasse GeUitprinten dacht ik om een nieuwe object te moeten maken van de klasse GeBewaren om zo aan de getter te kunnen van de list met het object print.getMijnLijst.

Soms vraag ik me of of we niet te snel gaan in de les omdat we nog maar 60 'utjes les hebben gekregen en ik toch al denk dat we redelijk ver zitten of vergis ik me.

ps het boek dat we gebruiken is de head first :-)

mvg b,
EvilBro schreef: za 23 mar 2013, 13:33
Het tweede deel vind ik een discussiepunt. Er wordt van veel te veel klasses gebruik gemaakt. Mijn inziens zouden er maximaal 3 moeten zijn: Cursist, Cursus en Programma.
Volledig mee eens maar het is de bedoeling om te leren werken verschillende klasse en zo het object oriënterend te leren kennen.

Al onze eerste oefening waren in de main geschreven in 1 klasse en nu moeten we leren verschillende klasse te gebruiken.

Als ik in mijn klasse GeBewaren daarin een methode printuit maak en deze oproep vanuit GeOpvragen lukt het wel dus maar ik wilde dus daarvoor een aparte klasse gebruiken,noem het mezelf iets moeilijker te maken :-)

mvg b

Berichten: 7.068

Re: arraylist in andere classe gebruiken en printen

Code: Selecteer alles


public class A {

    int a = 0;

        

    public void add(int b) {

        this.a = this.a + b;

    }

    

    public String value() {

        return ("" + a);

    }

    

    public static void main(String[] args) {

        A anObject = new A();

        A anotherObject = new A(); // Let op! dit object is dus niet gelijk aan anObject!

        System.out.println("anObject = " + anObject.value() + "; anotherObject = " + anotherObject.value());

        anObject.add(5);

        System.out.println("anObject = " + anObject.value() + "; anotherObject = " + anotherObject.value());

        System.out.println("Wat jij doet is in principe hetzelfde als wat hier gebeurt.\nJij past een object aan, maakt een ander object en doet dan \nalsof dit het aangepaste object is. Dat is echter niet zo.");

    }

}

Gebruikersavatar
Berichten: 7.390

Re: arraylist in andere classe gebruiken en printen

Code: Selecteer alles

GeBewaren gb = new GeBewaren();
Zou deze niet moeten worden aangemaakt vanaf je programma start? Dan kan je steeds dezelde gb gebruiken, want nu maak jij natuurlijk een nieuwe gb aan en zijn vorige nieuwe elementen opgeslagen in een 'andere gb'?
[font=helvetica, arial, sans-serif]Het tweede deel vind ik een discussiepunt.[/font]
Akkoord.
"C++ : Where friends have access to your private members." Gavin Russell Baker.

Berichten: 35

Re: arraylist in andere classe gebruiken en printen

hallo

ik denk dat ik begrijp wat jullie willen bedoelen.

Ik maak dus een nieuw object gb met een arraylist in.

Nu dacht ik om in GeUitprinten een ander object te maken van GeBewaren en de lijst te "importeren" met een getter,

Dus als ik mee ben met jullie uitleg heb ik nu ipv de lijst te hebben geïmporteerd 2 objecten van GeBewaren.

Een eerste object gb van de klasse Gebewaren met de arraylist in waar de gegevens in zitten die ik er eerst instop met optie 1 te gebruiken.

En een 2e object print van de klasse Gebewaren die een nieuwe lege arraylist get.

Hoe kan ik dan het object gb in de klasse Geuitprinten krijgen om zo met een methode de lijst uit te printen.

ik vermoed dat we dit nog niet gezien hebben,we hebben enkel methodes leren gebruiken in hun eigen klasse en dan werkt het natuurlijk wel.

Als ik in de klasse waar heb object gb aangemaakt wordt een print methode oproep in de klasse Gebewaren(waar de arraylist zich bevind) dan lukt het wel om de gegevens af te printen want dan zit er iets in de lijst :-)

Laat het me gerust weten als ik er hier terug compleet naast zit met mijn redenering,ik kan tegen een stootje en zo leer je enkel bij :-)

mvg b,

Gebruikersavatar
Berichten: 7.390

Re: arraylist in andere classe gebruiken en printen

Ik zou het zo doen (getest en werkende):

Code: Selecteer alles

package Leden;

import java.util.Scanner;

public class StartProgram {

public void Start() {

GeBewaren gb = new GeBewaren();

  int x = 0;

  Scanner leesin = new Scanner(System.in);

  while (x < 5) {

   System.out.println("Wat wenst u te doen");

   System.out.println("");

   System.out.println("1: maak nieuwe cursist aan");

   System.out.println("2: verwijder cursist");

   System.out.println("3: print lijst uit");

   System.out.println("4: zoek in de lijst");

   System.out.println("5: beeindig");

   int y = leesin.nextInt();

   if (y == 1) {

	    GeOpvragen go = new GeOpvragen();

	    go.GeGevensOpvragen(gb);

   }

   if (y == 2) {

	    // GeVerwijder gv = new GeVerwijder();

	    // gv.wis();

   }

   if (y == 3) {

	    GeUitprinten gu = new GeUitprinten();

	    gu.printuit(gb);

   }

   if (y == 4) {

	    //GeZoeken gz = new GeZoeken();

	    //gz.zoekwoord();

   }

   if (y == 5) {

	    x = 5;

   }

  }

  leesin.close();

}

}
Vergeet de constructors niet mee aan te passen. Op zich lijkt me dit een logischere opbouw, zo kan je in principe ook meerdere 'databases' aanmaken (gb1,gb2) en afhankelijk van het argument sla je op in een van deze databases.
"C++ : Where friends have access to your private members." Gavin Russell Baker.

Berichten: 35

Re: arraylist in andere classe gebruiken en printen

hey

thx voor dit maar wat ik vermoed gaat dit al iets verder of ik gedacht had.

We hebben wel al gezien om een parameter mee te geven met een methode maar hier geef je een volledig object mee.

Als ik dan doe zoals we gezien hebben hoe we die parameter gebruiken in de opgeroepen methode werkt dit niet.

ik heb in bijlage mijn project ffgezipt.

Moest je het zien zitten om het ff aan te passen als het natuurlijk niet veel werk zou dit supper zijn zodanig ik kan zien hoe het volledig werkt.

dit topic staat natuurlijk in huiswerk en practica maar ons "huiswerk" is enkel om onze kennis bij te schaven en niet op "punten"

mvg b,
Bijlagen
leden.zip
(3.41 KiB) 108 keer gedownload

Gebruikersavatar
Berichten: 7.390

Re: arraylist in andere classe gebruiken en printen

WSF.zip
(9.43 KiB) 101 keer gedownload
Zo.
"C++ : Where friends have access to your private members." Gavin Russell Baker.

Reageer