Vorgehensweise unklar

Pixi

Mitglied
Hallo liebe Java-Forum Gemeinde!
ich bin neu hier und hoffe, dass ich im richtigen Unterforum schreibe und mich an die ForumRegeln halte.

Ich wollte aus Übungszwecken ein kleines eigenes Programm schreiben, allerdings ist mir unklar wie ich am besten vorgehen sollte und komme selber nicht weiter. Ich schildere kurz wie das Programm ausschauen soll.

Es geht bei dem Programm darum einen Grillabend zu organisieren und zu berechnen wie viel jeder Gast an Geld zahlen muss, je nachdem was er alles konsumiert (Vegetarier sollen sich zB nicht am Fleisch beteiligen, Autofahrer nicht am Alkohol usw). Man soll verschiedene Kategorien einfügen können wie zB "Fleisch", "Gemüse", "Alkohol", "alkoholfreie Getränke" usw. Und jeder einzelne Kategorie soll man Kosten zuordnen. (zB Das Fleisch hat 35 Euro gekostet, das Gemüse 10Euro usw).
Man soll Gäste einfügen können und für jeden Gast individuell auswählen, bei welchen Kategorien er sich beteiligt.
Allerdings will ich nicht dass man von vornherein festlegen muss wie viele verschiedene Kategorien es gibt bzw wie viele Gäste genau kommen, sondern dynamisch einen neuen Gast, eine neue Kategorie hinzufügen können. Auch die Reihenfolge scheint mir egal zu sein (weshalb ich Array als Lösung auschließe)
Am Ende soll man für jeden individuellen Gast berechnen können, was er zu zahlen hat. Jemand der sich an Fleisch und Gemüse beteiligt, hat quasi folgende Kosten= "Fleischkosten"/"Menge aller Gäste die sich am Fleisch beteiligen" + "Gemüsekosten"/"Menge aller Gäste die sich am Gemüse beteiligen" ...

Ich hoffe ich konnte etwa erklären, was ich vorhabe.

Datenstrukturen wie Stapel, Listen, verkettete Listen usw sind mir bekannt, auch mit Klassen und Objekten kenne ich mich auch. Mit Datenbanken allerdings noch nicht und ich weiß eben nicht ob ich für dieses Programm Datenbanken bräuchte oder nicht.

Mein Problem ist folgendes:
Ich kann eine Klasse Kategorie schreiben, sd ich verschiedene Objekte der Klasse Kategorie erstellen kann, die verschiedene Kosten haben und verschieden heißen.
Ich kann auch eine Klasse Gäste schreiben, sd ich verschiedene Objekte der Klasse Gäste erstellen kann, die verschieden heißen.
Aber wie kann ich (1.) einem Gast x verschiedene Kategorien zuordnen und (2.) gleichzeitig für jede Kategorie zählen, wie viele Gäste sich an dieser Kategorie beteiligen?

Der Lange Text tut mir leid, und ich hoffe ich habe einigermaßen verständlich erklärt, wieso ich nicht weiterkomme.

Viele Grüße und Danke schonmal fürs Lesen!!!
 

mrBrown

Super-Moderator
Mitarbeiter
Mit Datenbanken allerdings noch nicht und ich weiß eben nicht ob ich für dieses Programm Datenbanken bräuchte oder nicht.
Brauchst du nicht, solche Dinge kann man immer auch ohne Datenbank lösen ;)

Ich kann eine Klasse Kategorie schreiben, sd ich verschiedene Objekte der Klasse Kategorie erstellen kann, die verschiedene Kosten haben und verschieden heißen.
Ich kann auch eine Klasse Gäste schreiben, sd ich verschiedene Objekte der Klasse Gäste erstellen kann, die verschieden heißen.
Aber wie kann ich (1.) einem Gast x verschiedene Kategorien zuordnen und (2.) gleichzeitig für jede Kategorie zählen, wie viele Gäste sich an dieser Kategorie beteiligen?
Kategorien bekommen einfach eine Liste/Set/Whatever von Gästen, sodass du der Kategorie dann Gäste hinzufügen kannst ;)
 

Javinner

Top Contributor
Pixi hat gesagt.:
Aber wie kann ich (1.) einem Gast x verschiedene Kategorien zuordnen und (2.) gleichzeitig für jede Kategorie zählen, wie viele Gäste sich an dieser Kategorie beteiligen?
Gast hat: Namen, Vegetarier (Ja/Nein), Trinker(Ja/Nein)
Was weiß man bei Partybeginn? Die Anzahl der Geste und die Einkaufsliste samt Preisen.
Ich an deiner Stelle würde die Einkaufsliste durchgehen und anhand der Gasteigenschaften für jeweiligen Gast
die Rechnung ausstellen.
 

Javinner

Top Contributor
Pixi hat gesagt.:
Allerdings will ich nicht dass man von vornherein festlegen muss wie viele verschiedene Kategorien es gibt bzw wie viele Gäste genau kommen, sondern dynamisch einen neuen Gast, eine neue Kategorie hinzufügen können
Ein neuen Gast hinzufügen ist wohl kein Problem, eine neue Kategorie? Das ist mit viel Arbeit verbunden, denn
irgendwo muss diese neue Kategorie bereits erwähnt sein, damit es einer Hauptkategorie beim Abrechnen zugeordnet werden kann.

weshalb ich Array als Lösung auschließe
Ob es hilfreich ist? Schließlich benutzt ArrayList intern ebenso ein Array.. Ich würde die Entscheidung nochmals überdenken ;)

Eine Datenbank wird hier, wie @mrBrown bereist erwähnt hat, nicht nötig sein. Du willst ja letztendlich nur den Grillabend berechnen. Eine mögliche Lösung könnte so aussehen:
Java:
public class Barbecue
{

    public static void main(String[] args)
    {
        BarbecueRegister personList = new BarbecueRegister();
        personList.addToParty(new Person("Natalie", false, false));
        personList.addToParty(new Person("Tanja", true, true));
        personList.addToParty(new Person("Otto", false, true));
        personList.addToParty(new Person("Oliver", true, false));
        personList.getPartyGuestsInfo();

        ProductRegister productRegister = new ProductRegister();
        productRegister.addToShoppingList(new Product(Paraphernalia.EDIBLE_MEAT, 40));
        productRegister.addToShoppingList(new Product(Paraphernalia.EDIBLE_GENERAL, 25));
        productRegister.addToShoppingList(new Product(Paraphernalia.DRINKABLE_ALCOHOL, 40));
        productRegister.addToShoppingList(new Product(Paraphernalia.DRINKABLE_GENERAL, 15));

        System.out.println("----------------------------------");
       
        CashRegister cashRegister = new CashRegister();
        cashRegister.getProportionallyCost(personList, productRegister);

    }
}
/** Konsolenausgabe */
Name: Natalie, Fleisch: Nein, Alkohol: Nein
Name: Tanja, Fleisch: Ja, Alkohol: Ja
Name: Otto, Fleisch: Nein, Alkohol: Ja
Name: Oliver, Fleisch: Ja, Alkohol: Nein
----------------------------------
Name: Natalie, Gesamtkosten: 10.0
Name: Tanja, Gesamtkosten: 50.0
Name: Otto, Gesamtkosten: 30.0
Name: Oliver, Gesamtkosten: 30.0
 

mrBrown

Super-Moderator
Mitarbeiter
Ein neuen Gast hinzufügen ist wohl kein Problem, eine neue Kategorie? Das ist mit viel Arbeit verbunden, denn
irgendwo muss diese neue Kategorie bereits erwähnt sein, damit es einer Hauptkategorie beim Abrechnen zugeordnet werden kann.
Eine neue Kategorie erstellen ist Genaus viel Arbeit wie ein neuer Gast (zumindest mit der von mir Erwähnten Lösungsvariante) ;)

Ob es hilfreich ist? Schließlich benutzt ArrayList intern ebenso ein Array.. Ich würde die Entscheidung nochmals überdenken ;)
Die Aussage ist genauso sinnvoll, wie keine Maschinensprache benutzen zu wollen, obwohl Java in diese kompiliert wird ;)
 

Pixi

Mitglied
@mrBrown und @Javinner vielen vielen Dank für die schnellen Antworten:))

Brauchst du nicht, solche Dinge kann man immer auch ohne Datenbank lösen ;)

ok super, das ist schonmal gut:)

Kategorien bekommen einfach eine Liste/Set/Whatever von Gästen, sodass du der Kategorie dann Gäste hinzufügen kannst ;)

hm irgendwie ist mir das noch nicht ganz klar. Ich habe zB 3 verschiedene Kategorie Objekte und 4 verschiedene Gäste Objekte. Wenn ich jetzt eine Methode schreibe, welche den Kategorien Gäste hinzufügt(zb. Fleisch.add("Heike")), dann "weiß" das Fleisch natürlich, dass sich eine weitere Person beteiligt, welche Heike heißt. Aber wie kann ich verdeutlichen, dass es sich um das bereits existierende Objekt "Heike" handelt? Sodass es zB möglich wäre alle Kategorien aufzurufen bei denen sich Heike beteiligt?

Ich will quasi eine Liste von Kategorie Objekten und eine Liste von Gäste Objekten haben und denen eine Beziehung hinzufügen. Und vor allem möchte ich problemlos sowohl eine neue Kategorie hinzufügen können als auch einen neuen Gast.


Gast hat: Namen, Vegetarier (Ja/Nein), Trinker(Ja/Nein)
Was weiß man bei Partybeginn? Die Anzahl der Geste und die Einkaufsliste samt Preisen.
Ich an deiner Stelle würde die Einkaufsliste durchgehen und anhand der Gasteigenschaften für jeweiligen Gast
die Rechnung ausstellen.

Ich will eben auch während der Partyplanung einen neuen Gast oder eine neue Kategorie hinzufügen können ohne nochmal alles von vorne "eintippen" zu müssen!


Eine mögliche Lösung könnte so aussehen:
Java:
public class Barbecue
{

    public static void main(String[] args)
    {
        BarbecueRegister personList = new BarbecueRegister();
        personList.addToParty(new Person("Natalie", false, false));
        personList.addToParty(new Person("Tanja", true, true));
        personList.addToParty(new Person("Otto", false, true));
        personList.addToParty(new Person("Oliver", true, false));
        personList.getPartyGuestsInfo();

        ProductRegister productRegister = new ProductRegister();
        productRegister.addToShoppingList(new Product(Paraphernalia.EDIBLE_MEAT, 40));
        productRegister.addToShoppingList(new Product(Paraphernalia.EDIBLE_GENERAL, 25));
        productRegister.addToShoppingList(new Product(Paraphernalia.DRINKABLE_ALCOHOL, 40));
        productRegister.addToShoppingList(new Product(Paraphernalia.DRINKABLE_GENERAL, 15));

        System.out.println("----------------------------------");
     
        CashRegister cashRegister = new CashRegister();
        cashRegister.getProportionallyCost(personList, productRegister);

    }
}
/** Konsolenausgabe */
Name: Natalie, Fleisch: Nein, Alkohol: Nein
Name: Tanja, Fleisch: Ja, Alkohol: Ja
Name: Otto, Fleisch: Nein, Alkohol: Ja
Name: Oliver, Fleisch: Ja, Alkohol: Nein
----------------------------------
Name: Natalie, Gesamtkosten: 10.0
Name: Tanja, Gesamtkosten: 50.0
Name: Otto, Gesamtkosten: 30.0
Name: Oliver, Gesamtkosten: 30.0

vielen vielen Dank für Deine Mühe und Hilfe!!!! Allerdings müsste man hier beim Erstellen eines neuen Gastes, eine feste Menge an Kategorien haben.. Mir ist es aber wichtig, flexibel neue Gäste und neue Kategorien erstellen zu können. Ist sowas überhaupt möglich?


Nochmals vielen Dank für Eure Antworten:))
 

Javinner

Top Contributor
Pixi hat gesagt.:
Ich habe zB 3 verschiedene Kategorie Objekte und 4 verschiedene Gäste Objekte
Es wäre sehr hilfreich, wenn du das, was du bereits hast, hier postest.
Aber wie kann ich verdeutlichen, dass es sich um das bereits existierende Objekt "Heike" handelt?
In dem du jeden Gast eine eigene ID verpasst (statische Klassenvariablen). Oder über HashCode, dann wären aber paar Eingaben zu jeweiligem Gast dringend nötig. Hier der beste Artikel, welchen ich zum Thema je las.
Allerdings müsste man hier beim Erstellen eines neuen Gastes, eine feste Menge an Kategorien haben..
Die Anzahl der Gäste ist variabel und kann problemlos erweitert werden, den schließlich erstellst du ja nur ein neues Objekt der Klasse "Person" und fügst es der Gästeliste zu. Was du unter "Kategorien" vorstellst und wie dann das alles aussehen soll, ist mir im Augenblick nicht richtig klar, aber bereits erwähnt.
 

mrBrown

Super-Moderator
Mitarbeiter
In dem du jeden Gast eine eigene ID verpasst (statische Klassenvariablen). Oder über HashCode, dann wären aber paar Eingaben zu jeweiligem Gast dringend nötig. Hier der beste Artikel, welchen ich zum Thema je las.
ID und statische Klassenvariablen wiedersprechen sich allerdings...und hashcode hat damit nicht wirklich was zu tun ;)
 

Javinner

Top Contributor
@Pixi
Das mit Kategorien ist mir Heute Nacht eingefallen, oh man :)
Habe kurzerhand was geschrieben. Hast du es so gemeint?
Java:
public class BarbecueTwo
{

    public static void main(String[] args)
    {
        Person alex = new Person("Alex", "Mueller");
        Person lili = new Person("Lili", "Adler");
        Person antje = new Person("Antje", "Wuttig");
        Person marieS = new Person("Marie", "Schmidt");
        Person marieA = new Person("Marie", "Alsbach");

        Category wein = new Category("Wein", 10);
        Category haenchen = new Category("Hänchen", 6);
        Category salat = new Category("Salat", 4);
        Category grillKohle = new Category("Grillkohle", 3);

        wein.addToCategory(alex, lili, antje, marieA);
        haenchen.addToCategory(marieS, antje, marieA);
        salat.addToCategory(lili, antje, marieS);
        grillKohle.addToCategory(alex, lili, antje, marieS, marieA);

        List<Category> list = new ArrayList<>();
        list.add(wein);
        list.add(haenchen);
        list.add(salat);
        list.add(grillKohle);

        CashRegister cashRegister = new CashRegister(list);
        cashRegister.printProportionallyCost();

    }

}
/** Konsolenausgabe */
Antje Wuttig, Rechnung: 6.433
Alex Mueller, Rechnung: 3.1
Marie Alsbach, Rechnung: 5.1
Lili Adler, Rechnung: 4.433
Marie Schmidt, Rechnung: 3.933

Nun lassen sich Kategorien sowie Personen beliebig hinzufügen :)
(gelöschter Text, war unwichtig)

@mrBrown
Wie ich bereits schrieb: lass deinen Aussagen Taten folgen und untermauere diese mit Code.
Dies würde dem einen oder anderen Thread viel mehr beitragen, als nur klug daher zu schreiben.
Mag sein, dass du uns allen überlegen bist, jedoch trägt deine momentane Vorgehensweise wenig bis nichts dazu bei ;)
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
@mrBrown
Wie ich bereits schrieb: lass deinen Aussagen Taten folgen und untermauere diese mit Code.
Dies würde dem einen oder anderen Thread viel mehr beitragen, als nur klug daher zu schreiben.
Mag sein, dass du uns allen überlegen bist, jedoch trägt deine momentane Vorgehensweise wenig bis nichts dazu bei ;)
Mit fertigem Code ist hier wohl kaum geholfen (und das meiste was ich sage lässt sich kaum sinnvoll mit Code untermauern...)

Ich denke mal das bezieht sich auf die Aussage zu IDs und hashcode? Was soll man da an fertigem Code zeigen, ohne das man alles liefert? o_O (mit dem gleichem Anspruch hättest du dann dazu auch schon Code zeigen müssen...)
das static und ID sich nicht verträgt sollte doch auch klar sein? eine statische Variable kann eben niemals pro Objekt einzigartig sein...
 

Pixi

Mitglied
@Javinner und @mrBrown vielen Dank für die weiteren hilfreichen Antworten:))

@Javinner , ich glaube du hast nun verstanden wie ich es meine:)) Also ich will eben nicht am Anfang angeben müssen wie viele Gäste und wie viele Kategorien es sind.

Ich hab mich ein bisschen im Thema n-m Beziehungen eingelesen und nun drei Klassen geschrieben und ich denke dass das der richtige Weg sein könnte/sollte. Leider kriege ich es aber nicht hin eine ganz wichtige Methode zu schreiben. Ich poste allerdings erstmal den Code und erläutere dann was mein Problem ist:)
Da ich sowas zum ersten Mal programmiert habe, ist jeder Tipp und jegliche Kritik an dem Code herzlich willkommen:)
Java:
import java.util.ArrayList;
public class Guest{
   private String name;
   private ArrayList<Categorie> Categories;
  
   public Guest(String name) {
       this.name=name;
       this.Categories=new ArrayList<Categorie>();
   }
  
   public String getName(){
       return this.name;
   }
  
   public void addCategorieReference(Categorie categorie){
       this.Categories.add(categorie);
   }
}


import java.util.ArrayList;
public class Categorie {
   private String name;
   private double cost;
   private ArrayList<Guest> Guests;
  
   public Categorie (String name)
   {
       this.name=name;
       this.cost=0;
       this.Guests=new ArrayList<Guest>();
   }
  
   public void addamount(double amount)
   {
       this.cost+=amount;
   }
  
   public double getcost()
   {
       return this.cost;
   }
  
   public String getname()
   {
       return this.name;
   }
  
   public void addGuestReference(Guest guest)
   {
       this.Guests.add(guest);
   }
  
   public int getAmountOfParticipants()
   {
       return this.Guests.size();
   }
  
}

import java.util.ArrayList;


public class Party {
  
   ArrayList<Categorie> categories;
   ArrayList<Guest> guests;
   String name;  
  
   public Party(String name)
   {
       this.name=name;
       this.categories=new ArrayList<Categorie>();
       this.guests=new ArrayList<Guest>();
  
   }
  
   public void add_guest(Guest guest)
   {
       guests.add(guest);
   }
  
   public void add_categorie(Categorie categorie)
   {
       categories.add(categorie);
   }
  
 /*folgende Methode kriege ich nicht hin. Ich weiß dass ich die addGuestReference und addCategorieReference Methoden hier verwenden müsste, aber ich weiß nicht wie genau ich das tun soll. Wichtig ist, dass wenn ein Gast eine Kategorie zugeteilt bekommt, die Kategorie auch einen Gast zugeteilt bekommt und umgekehrt. Ich hoffe Ihr versteht was ich meine!*/
public void add_relation(Categorie categorie,Guest guest)
  {
  }
   
}

Also ich hab eben zwei Klassen (Gäste und Kategorien erstellt), die beide jeweils eine ArrayList der anderen Klasse besitzen. Also "besitzt" jeder Gast eine Liste von Kategorien und jede Kategorie eine Liste von Gästen. Ich habe auch pro Klasse eine Methode geschrieben, welche diesen Listen Elemente hinzufügt.

Das einzige Problem, das ich gerade denke ich noch habe, ist es eine Methode zu schreiben, die eine bestimmte Kategorie und einen bestimmten Gast verbindet. Also der Gast A bekommt in seiner Kategorieniste die Kategorie B, und die Kategorie B bekommt gleichzeitig in seiner GästeListe den Gast A.

Ich hoffe ihr versteht mein Problem und danke für Eure Zeit und Mühe!!
Viele Grüße!
 

Pixi

Mitglied
Wie rufst du denn die add_guest-Methode auf?

Ich rufe sie auf eine bestimmte Party auf. zB:

Party silvester=new Party("Silvester");
Guest heike=new Guest("Heike");
silvester.addGuest(Heike);

also in der Klasse Party, habe ich versucht die anderen zwei Klassen zusammenzufügen, aber ich weiß nicht ob das Sinn ergibt..
 
Zuletzt bearbeitet:

Javinner

Top Contributor
Pixi hat gesagt.:
Leider kriege ich es aber nicht hin eine ganz wichtige Methode zu schreiben
Immer dann, wenn du eine Person einer Kategorieliste oder eine Kategorie einer Personliste hinzufügst, solltest du
gleich in der add()-Methode jeweils die Parametervariable dazu auffordern, die Person, bzw. die Kategorie aufzunehmen (this)
 

Pixi

Mitglied
@Pixi
Irgendwie komme ich nicht dahinter, wie du es machen willst, bzw. warum du es doppelt einrichten willst.

verstehe ich es richtig, dass du meinst, dass die klassen Guest und Categorie ausreichen?
(also so?)
Java:
import java.util.ArrayList;
public class Guest{
   private [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name;
   private ArrayList<Categorie> Categories;
  
   public Guest([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name) {
       this.name=name;
       this.Categories=new ArrayList<Categorie>();
   }
  
   public [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] getName(){
       return this.name;
   }
  
   public void addCategorieReference(Categorie categorie){
       this.Categories.add(categorie);
   }
}


import java.util.ArrayList;
public class Categorie {
   private [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name;
   private double cost;
   private ArrayList<Guest> Guests;
  
   public Categorie ([URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] name)
   {
       this.name=name;
       this.cost=0;
       this.Guests=new ArrayList<Guest>();
   }
  
   public void addamount(double amount)
   {
       this.cost+=amount;
   }
  
   public double getcost()
   {
       return this.cost;
   }
  
   public [URL='http://www.google.com/search?hl=en&q=allinurl%3Adocs.oracle.com+javase+docs+api+string']String[/URL] getname()
   {
       return this.name;
   }
  
   public void addGuestReference(Guest guest)
   {
       this.Guests.add(guest);
   }
  
   public int getAmountOfParticipants()
   {
       return this.Guests.size();
   }
  
}
 

Javinner

Top Contributor
Pixi hat gesagt.:
verstehe ich es richtig, dass du meinst, dass die klassen Guest und Categorie ausreichen?
Letztendlich ist es egal, ob das Produkt den Gast hinzufügt (#11) oder umgekehrt.
Wichtig ist die Abrechnung und hier gilt eins: viele Wege führen nach Rom. Welchen Weg du nimmst, liegt ganz allein bei dir. Ich bin hier den Weg gegangen, der Aufforderung nach, alle Gäste den jeweiligen Waren(Kategorien), an den sich diese beteiligen, hinzuzufügen. Danach übergab ich die Liste der Waren(Kategorien), welche a) den Preis und b) eine Liste bestimmter Gäste inne hat, an die Abrechnung. Und genau hier wird es interessant: Hier erschien es mir sinnvoll, fürs Erste alle Gäste in einer Liste aufzunehmen, natürlich unter dem Aspekt, dass ein Gast nur einmal in der Liste vorkommen darf. Danach bin ich die Einkaufsliste durchgegangen und immer dann, wenn ein Gast in der jeweiligen Kategorie auftauchte, dem Gast das jeweilige Anteil in die Rechnung gestellt habe. Am Ende habe ich es in der Konsole ausgeben lassen.

Die Frage, ob hier nur die Klassen notwendig sind, lässt sich nur soweit erklären, dass es hier für den Moment ausreicht, um jedem Gast die anteiligen Kosten jeder Kategorie, an welcher er sich beteiligt, hinzuzufügen, um ihm am Ende eine Rechnung ausstellen zu können. Natürlich lassen sich neue Gäste und Kategorien problemlos erstellen. Der Abrechnung ist es egal.
Java:
public class BarbecueTwo
{

    public static void main(String[] args)
    {
        Person alex = new Person("Alex", "Mueller");
        Person lili = new Person("Lili", "Adler");
        Person antje = new Person("Antje", "Wuttig");
        Person marieS = new Person("Marie", "Schmidt");
        Person marieA = new Person("Marie", "Alsbach");
        Person markusW = new Person("Markus", "Werner");
        Person arturF = new Person("Artur", "Frank");
   
   

        Category wein = new Category("Wein", 10);

        /*Category haenchen = new Category("Hänchen", 6);
        Category salat = new Category("Salat", 4);
        Category grillKohle = new Category("Grillkohle", 3);
        Category grueneBohnen = new Category("Grüne Bohnen", 1.99);
        Category steak = new Category("Steak", 22);
        Category gefuelltePilze = new Category("Gefüllte Pilze", 7.99);*/

        wein.addToCategory(alex, lili, antje, marieA, marieS, markusW, arturF);

        /*haenchen.addToCategory(marieS, antje, marieA);
        salat.addToCategory(lili, antje, marieS);
        grillKohle.addToCategory(alex, lili, antje, marieS, marieA, markusW, arturF);
        grueneBohnen.addToCategory(antje, marieA, marieS, markusW);
        steak.addToCategory(alex, markusW, arturF, marieA);
        gefuelltePilze.addToCategory(antje, lili, marieA, marieS, markusW);*/

        List<Category> list = new ArrayList<>();
        list.add(wein);

        /*list.add(haenchen);
        list.add(salat);
        list.add(grillKohle);
        list.add(grueneBohnen);
        list.add(steak);
        list.add(gefuelltePilze);*/

        CashRegister cashRegister = new CashRegister(list);
        cashRegister.printProportionallyCost();

    }

}
/** Konsolenausgabe */
Markus Werner, Rechnung: 1.4285714285714286
Antje Wuttig, Rechnung: 1.4285714285714286
Artur Frank, Rechnung: 1.4285714285714286
Alex Mueller, Rechnung: 1.4285714285714286
Marie Alsbach, Rechnung: 1.4285714285714286
Lili Adler, Rechnung: 1.4285714285714286
Marie Schmidt, Rechnung: 1.4285714285714286
Ich persönlich sehe hier die doppelten "Beziehungen" (Kategorie kennt ihre Gäste und Gäste kennen alle Kategorien, an den diese sich beteiigen) kein Sinn. Es reicht aus, wenn nur eine "Beziehung" feststeht, damit die Abrechnung die Rechnung auslassen kann.
 
Zuletzt bearbeitet:

Pixi

Mitglied
viele Wege führen nach Rom.

Hallo Javinner,
erstmal nochmal vielen Dank für deine ganzen Antworten:)
Du hast Recht, viele Wege führen nach Rom. Aber irgendwie wollte ich unbedingt eine bidirektionale m-n Relation programmieren. Eigentlich wollte ich dieses Programm schreiben um dann zu versuchen meine erste GUI zu schreiben. Und ich hab gedanklich total darauf behart, das Programm ganz genau so zu schreiben, wie ich es mir anfangs vorgestellt hatte:)

Dein Lösungsvorschlag hätte auf jeden Fall den selben Zweck erfüllt und vielen Dank dafür:)

Ich habs jetzt auf jeden Fall geschafft die Methode zu schreiben, die genau die Beziehung zwischen zwei Objekten herstellt, die ich auch wollte. Wahrscheinlich habe ich das ganze unnötig kompliziert gemacht, aber wieso leicht wenns auch schwer geht:D:D (Ich denke ich habe dabei auch viel gelernt)

Zum Zwecke der Vollständigkeit poste ich hier jetzt meinen aktuellen Code und bedanke mich ganz Herzlich für die ganzen Hilfen:)


Java:
public class Main {
  
   public static void main(String[] args)
   {
       Guest heike=new Guest("Heike");
       Guest linda=new Guest("Linda");
       Guest anna=new Guest("Anna");
       Categorie alkohol=new Categorie("Alkohol");
       Categorie fleisch=new Categorie("Fleisch");
       Categorie gemuese=new Categorie("Gemüse");
      
       Party silvester=new Party("Silvester");
      
       silvester.add_guest(heike);
       silvester.add_guest(linda);
       silvester.add_guest(anna);
      
       silvester.add_categorie(alkohol);
       silvester.add_categorie(fleisch);
       silvester.add_categorie(gemuese);
      
       silvester.add_relation(alkohol, heike);
       silvester.add_relation(alkohol, linda);
      
       silvester.add_relation(gemuese, heike);
       silvester.add_relation(gemuese, anna);
       silvester.add_relation(gemuese, linda);
      
       silvester.add_relation(fleisch, heike);
       silvester.add_relation(fleisch, anna);

       alkohol.addamount(10);
       alkohol.addamount(15);
       alkohol.addamount(5);
      
       fleisch.addamount(35);
      
       gemuese.addamount(10);
       gemuese.addamount(20);
       gemuese.addamount(15);
      
       System.out.println("alkohol Kosten: "+alkohol.getcost());
       System.out.println("gemuese Kosten: "+gemuese.getcost());
       System.out.println("fleisch Kosten: "+fleisch.getcost());
      
       System.out.println("Teilnehmer an Alkohol "+alkohol.getAmountOfParticipants());
       System.out.println("Teilnehmer an Gemüse "+gemuese.getAmountOfParticipants());
       System.out.println("Teilnehmer an Fleisch "+fleisch.getAmountOfParticipants());
      
       System.out.println("Kosten pro Teilnehmer an Alkohol "+alkohol.getAmountPerParticipant());
       System.out.println("Kosten pro Teilnehmer an Gemüse "+gemuese.getAmountPerParticipant());
       System.out.println("Kosten pro Teilnehmer an Fleisch "+fleisch.getAmountPerParticipant());
      
       System.out.println("Kosten von Heike "+heike.getPersonalCosts());
       System.out.println("Kosten von Linda "+linda.getPersonalCosts());
       System.out.println("Kosten von Anna "+anna.getPersonalCosts());       
   }
}

import java.util.ArrayList;
public class Guest{
   private String name;
   private ArrayList<Categorie> Categories;
  
   public Guest(String name) {
       this.name=name;
       this.Categories=new ArrayList<Categorie>();
   }
  
   public String getName(){
       return this.name;
   }
  
   public void addCategorieReference(Categorie categorie)
   {
       this.Categories.add(categorie);
   }
  
   public int getAmountOfCategories()
   {
       return this.Categories.size();
      
   }
  
   public double getPersonalCosts()
   {
       double cost=0;
       for(Categorie categorie:this.Categories)
       {
           cost+=categorie.getAmountPerParticipant();  
       }
       return cost;
   }

}


import java.util.ArrayList;
public class Categorie {
   private String name;
   private double cost;
   private ArrayList<Guest> Guests;
  
   public Categorie (String name)
   {
       this.name=name;
       this.cost=0;
       this.Guests=new ArrayList<Guest>();
   }
  
   public void addamount(double amount)
   {
       this.cost+=amount;
   }
  
   public double getcost()
   {
       return this.cost;
   }
  
   public String getname()
   {
       return this.name;
   }
  
   public void addGuestReference(Guest guest)
   {
       this.Guests.add(guest);
   }
  
   public int getAmountOfParticipants()
   {
       return this.Guests.size();
   }
  
   public double getAmountPerParticipant()
   {
       return this.cost/this.Guests.size();
   }
}


import java.util.ArrayList;
public class Party {
  
   ArrayList<Categorie> categories;
   ArrayList<Guest> guests;
   String name;  
  
   public Party(String name)
   {
       this.name=name;
       this.categories=new ArrayList<Categorie>();
       this.guests=new ArrayList<Guest>();
   }
  
   public void add_guest(Guest guest)
   {
       guests.add(guest);
   }
  
   public void add_categorie(Categorie categorie)
   {
       categories.add(categorie);
   }
  
  
   public void add_relation(Categorie categorie,Guest guest)
   {
       categorie.addGuestReference(guest);
       guest.addCategorieReference(categorie);
   }
 
}

Ausgabe:
alkohol Kosten: 30.0
gemuese Kosten: 45.0
fleisch Kosten: 35.0
Teilnehmer an Alkohol 2
Teilnehmer an Gemüse 3
Teilnehmer an Fleisch 2
Kosten pro Teilnehmer an Alkohol 15.0
Kosten pro Teilnehmer an Gemüse 15.0
Kosten pro Teilnehmer an Fleisch 17.5
Kosten von Heike 47.5
Kosten von Linda 30.0
Kosten von Anna 32.5
 

mrBrown

Super-Moderator
Mitarbeiter
Ich habs jetzt auf jeden Fall geschafft die Methode zu schreiben, die genau die Beziehung zwischen zwei Objekten herstellt, die ich auch wollte. Wahrscheinlich habe ich das ganze unnötig kompliziert gemacht, aber wieso leicht wenns auch schwer geht:D:D (Ich denke ich habe dabei auch viel gelernt)
Nicht sehr kompliziert - etwas einfacher gehst allerdings ;)

z.B. kann sich einfach die Kategorie drum kümmern, dass sie selbst beim hinzufügen eines Gastes auch bei ihm eingetragen wird:

Java:
public void addGuestReference(Guest guest)
   {
       this.Guests.add(guest);
       guest.addCategorieReference(this)
   }
 

Pixi

Mitglied
Nicht sehr kompliziert - etwas einfacher gehst allerdings ;)

z.B. kann sich einfach die Kategorie drum kümmern, dass sie selbst beim hinzufügen eines Gastes auch bei ihm eingetragen wird:

Java:
public void addGuestReference(Guest guest)
   {
       this.Guests.add(guest);
       guest.addCategorieReference(this)
   }

dankeschön!!! Das war genau die Lösung, die ich gesucht habe:))
 

Ähnliche Java Themen

Neue Themen


Oben