Object in ArrayList

Status
Niet open voor verdere reacties.

jsobko

Gebruiker
Lid geworden
16 dec 2006
Berichten
6
Hoi,

Ik ben vrij nieuw voor java en ben dus een beetje aan het experimenteren.

Ik gebruik eclipse voor het programmeren en de Gui.
Ik probeer momenteel een kassa op te zetten.

Hiervoor heb ik dus 3 klasses Kassa, Bestelling en Bestellingregel. (Kassa is nu niet van belang)

De gui heeft twee knoppen die dezelfde methode oproepen met als parameter het type knop (in dit voorbeeld 1 knop voor drank en een andere voor eten) en als tweede parameter de prijs (1 voor drank en 10 eten)
In de klasse Bestelling heb ik een klasse variabele die bijhoud of er reeds een bestelling actief is.
als men dus op 1 van de twee knoppen klikt en er is geen actieve bestelling, dan word er eerst een instantie van Bestelling gemaakt alsook word de parameter op actief gezet, als er al eentje actief is is dit dus niet nodig.
hierna roep ik in beide gevallen een methode op die een regel aan de bestelling hoort toe te voegen. ( zo kan je in 1 bestelling een regel hebben voor drank en een regel hebben voor eten)
de methode addBestellingregel voegt dus een nieuwe instantie van het object Bestellingregel toe aan een array die aangemaakt is in de Bestelling klasse.

Tot hiertoe lijkt me dan ook alles goed te gaan

Wanneer ik dan de gevens wil uitlezen om ze te controleren, dan heeft elk object in de array dezelfde waarde.
Of ik schrijf de waardes dus niet juist weg, of ik lees ze niet goed uit.

Omdat ik de bomen niet meer zie door het bos had ik dus gehoopt op wat hulp hier.
Sorry als mijn post niet heel duidelijk moest zijn, het is lang geleden dat ik nog een forum gebruikte voor dit soort dingen.

Zie hieronder de code.

de methode die opgeroepen word als je op de knoppen klikt.
bij de knop drank gaan de waarder 1, 1 mee, bij de knop eten gaan de waarden 2, 10 mee.
Code:
    if(Bestelling.getActive() == false){
      Bestelling.setActive();
      Bestelling bestelling = new Bestelling();
      Bestelling.addBestellingregel(consumption, price);
      for( Bestellingregel b : Bestelling.bestelling){
        System.out.println(b.getConsumption() + ": " + b.getPrice()); // logging
      }
    }
    else{
      Bestelling.addBestellingregel(consumption, price);
      System.out.println(""); // logging
      for( Bestellingregel b : Bestelling.bestelling){
        System.out.println(b.getConsumption() + ": " + b.getPrice()); // logging
      }
    }

De klasse Bestelling
Code:
public class Bestelling {
  
  // instantieer de klasse variabele active die aangeeft of er reeds een bestelling open staat
  private static boolean active = false;
  // creer een arraylist die alle bestelregels beheerd
  public static ArrayList<Bestellingregel> bestelling = new ArrayList<Bestellingregel>();
  
  public Bestelling(){
  }

  
  // methode om een bestellingregel toe te voegen aan de arraylist bestelling
  public static void addBestellingregel(int consumption, int price){
    bestelling.add(new Bestellingregel(consumption, price)); 
  }


}

De klasse Bestellingregel
Code:
public class Bestellingregel {
  
  //instantieer de klasse variabelen voor cumsumptie en prijs
  private static int consumption;
  private static int price;
  
  // ken de waarde van consumptie en prijs toe aan de klasse variabelen
  public Bestellingregel(int consumption, int price){
    Bestellingregel.consumption = consumption;
    Bestellingregel.price = price;
  }
  
  // geef de consumptienr van de instantie van dit object
  public int getConsumption(){
    return consumption;
  }
  
  // geef de prijs van de instantie van dit object
  public int getPrice(){
    return price;
  }

}

als output krijg ik na 1 keer op de knop drank klikken dan
"1: 1"
wat helemaal klopt.

Maar als ik dan klik op de knop eten verwacht ik
"1: 1"
"2: 10"

maar krijg als output

"2 :10"
"2 : 10"

alle hulp is welkom!
 
Heb het probleem reeds gevonden.

in de klasse bestelling heb ik de van consumption en price static variabelen gemaakt, door hier de static weg te laten en in de constructor this te gebruiken is het opgelost.

als toch iemand opmerkingen heeft, alle feedback is welkom!
 
Het is goed dat je de statics weghaald. Ik zou hetzelfde doen bij de addBestellingsRegel methode. Verder kan je de Arrraylist met bestellingsregels private maken. Het idee van object geörienteerd programmeren is namelijk dat elke klasse (en dus elk object) verantwoordelijk is voor zijn eigen zaken (methodes, variabelen). Zo houd je het overzichtelijk en begrijpelijk. Als je de ArrayList bijvoorbeeld private maakt dan kan alleen de klasse Bestelling erbij. Andere klasses kunnen dan via de addBestelregel functie regels aan de arraylist toevoegen en verwijderen. Zo krijg je geen wirwar van klasses die allemaal acties op de arraylist doen, door simpelweg: Bestelling.bestelling aan te roepen. Probeer zo veel mogelijk statics te vermijden. Ik gebruik ze zelf alleen voor constanten die vanuit andere klasses benaderd moeten worden of voor singletons, maar dat is een uitzondering op de regel.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan