Springen naar inhoud

arraylist in andere classe gebruiken en printen



  • Log in om te kunnen reageren

#1

rcb8dboy

    rcb8dboy


  • >25 berichten
  • 35 berichten
  • Gebruiker

Geplaatst op 22 maart 2013 - 22:23

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

package Leden;
public class Start {
/**
  * @param args
  */
public static void main(String[] args) {
  // TODO Auto-generated method stub
  StartProgram go = new StartProgram();
  go.Start();
  }
}

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();
}
}

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);
  }
}
}

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;
}
  }


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

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

Veranderd door rcb8dboy, 22 maart 2013 - 22:25


Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

aadkr

    aadkr


  • >5k berichten
  • 5441 berichten
  • Pluimdrager

Geplaatst op 22 maart 2013 - 23:05

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.

#3

rcb8dboy

    rcb8dboy


  • >25 berichten
  • 35 berichten
  • Gebruiker

Geplaatst op 22 maart 2013 - 23:17

waarvoor dank :-)

mvg b,

#4

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 23 maart 2013 - 12:53

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.

#5

rcb8dboy

    rcb8dboy


  • >25 berichten
  • 35 berichten
  • Gebruiker

Geplaatst op 23 maart 2013 - 13:06

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,

#6

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 23 maart 2013 - 13:09

   ...
   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.

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.

#7

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 23 maart 2013 - 13:17

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.

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.

#8

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 23 maart 2013 - 13:33

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.

#9

rcb8dboy

    rcb8dboy


  • >25 berichten
  • 35 berichten
  • Gebruiker

Geplaatst op 23 maart 2013 - 13:46

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,

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

#10

EvilBro

    EvilBro


  • >5k berichten
  • 6703 berichten
  • VIP

Geplaatst op 23 maart 2013 - 14:02


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.");

    }

}

#11

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 23 maart 2013 - 14:07

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'?

Het tweede deel vind ik een discussiepunt.

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

#12

rcb8dboy

    rcb8dboy


  • >25 berichten
  • 35 berichten
  • Gebruiker

Geplaatst op 24 maart 2013 - 10:54

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,

#13

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 24 maart 2013 - 11:39

Ik zou het zo doen (getest en werkende):
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.

#14

rcb8dboy

    rcb8dboy


  • >25 berichten
  • 35 berichten
  • Gebruiker

Geplaatst op 24 maart 2013 - 14:34

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,

Bijgevoegde Bestanden

  • Bijlage  leden.zip   3,41K   56 maal gedownload

#15

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 24 maart 2013 - 15:03

Bijlage  WSF.zip   9,43K   53 maal gedownload
Zo.
"C++ : Where friends have access to your private members." — Gavin Russell Baker.






Also tagged with one or more of these keywords: informatica

0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures