Array gleiche Datentypen zusammenrechnen

Nyu

Mitglied
Hallo liebes Java-Forum,

meine Aufgabenstellung ist das ich bei einer Kiosk Verwaltung mehrere Artikelgruppen, Artikel, Nummer, Anzahl, Preis eingeben soll.
Nach der eingabe sollen diese dann 1x nach Namen bzw. 1x nach Gruppe sortiert werden.
(Dies habe ich bereits implementiert)
Nun allerdings soll ich bei gleichen Gruppen den Gesamtwert der Gruppe bestimmen.
z.B. (Gruppe, Artikel, Nummer, Anzahl, Preis):
(Auto, Audi, 001, 20, 10); (Eis, Vanille, 002, 30, 20); (Eis, Erdbeere, 003, 20, 50); (Auto, VW, 004, 15, 40);
Nachdem diese Sortiert sind würde es wie folgt aussehen:
Auto Audi
Auto VW
Eis Erdbeere
Eis Vanille

Als Ausgabe hätte ich dann sowas wie: "Gesamtwer der Gruppe: Auto beträgt: 800"
Analog für Eis.

Allerdings habe ich dabei schwierigkeiten mit dem Code, der ist auch ziemlich doof codiert.
Könnte mir da vielleicht jemand helfen?

Java:
for(int i = 0; i < artikelTabelle.length; i++) {
            double total = 0;
            if(artikelTabelle[i] != null) {               
                for(int j = 0; j < artikelTabelle.length; j++) {
                    if(artikelTabelle[i].getArtikelGruppe().equals(artikelTabelle[j].getArtikelGruppe())) {
                        total = total + artikelTabelle[j].getAnzahlArtikel()*artikelTabelle[j].getEinkaufsPreis();
       
                    }
                   
                }
                    if(!(artikelTabelle[i].getArtikelGruppe().equals(artikelTabelle[i].getArtikelGruppe()))){
                    System.out.println("Gesamter Warenwert der Artikelgruppe: " + artikelTabelle[i].getArtikelGruppe() + " , betraegt :" + total);
                    }
                }
 
        }

Danke im vorraus für einen Tipp!

Mfg.
 

Javinner

Top Contributor
@Nyu
Ein Array, wenn ich dich richtig verstanden habe, ist hier nicht optimal. Ich hätte mich hier für eine Liste entschieden, oder gar Map.

Was ich sehr gerne benutze, ist ein Enum. Schau dir das hier an:
Java:
public class Nyu
{

    public static void main(String[] args)
    {
        Produkt[] array = {new Produkt(Produktgruppe.AUTO, "Audi", 12323, 10, 20),
            new Produkt(Produktgruppe.AUTO, "BMW", 33489, 5, 30),
            new Produkt(Produktgruppe.EIS, "Vanile", 21134, 10, 2),
            new Produkt(Produktgruppe.EIS, "Schoko", 54523, 2, 3),
            new Produkt(Produktgruppe.AUTO, "Nissan", 34564, 5, 20)};

        Kiosk kiosk = new Kiosk(array);
        System.out.println(kiosk.getWert(Auswahl.PREIS, Produktgruppe.AUTO));
        System.out.println(kiosk.getWert(Auswahl.PREIS, Produktgruppe.EIS));
    }

}
/** Konsolenausgabe */
450.0
26.0

class Kiosk
{

    private Produkt[] produkts;

    public Kiosk(Produkt[] produkts)
    {
        this.produkts = produkts;
    }

    protected double getWert(Auswahl auswahl, Produktgruppe produktgruppe)
    {
        switch (auswahl) {
            case ANZAHL:
                return getAnzahl(produktgruppe);
            default:
                return getPreis(produktgruppe);
        }
    }

    private double getAnzahl(Produktgruppe produktgruppe)
    {
        double summe = 0;
        for (Produkt p : produkts) {
            if (p.getProduktgruppe() == produktgruppe) {
                summe += p.getAnzahl();
            }
        }
        return summe;
    }

    private double getPreis(Produktgruppe produktgruppe)
    {
        int summe = 0;
        for (Produkt p : produkts) {
            if (p.getProduktgruppe() == produktgruppe) {
                summe += p.getPreis() * p.getAnzahl();
            }
        }
        return summe;
    }

}


class Produkt
{

    private final Produktgruppe produktgruppe;
    private final String name;
    private final int id;
    private final double anzahl;
    private final double preis;

    public Produkt(Produktgruppe produktgruppe, String name, int id, double anzahl, double preis)
    {
        this.produktgruppe = produktgruppe;
        this.name = name;
        this.id = id;
        this.anzahl = anzahl;
        this.preis = preis;
    }

    public Produktgruppe getProduktgruppe()
    {
        return produktgruppe;
    }

    public String getName()
    {
        return name;
    }

    public int getId()
    {
        return id;
    }

    public double getAnzahl()
    {
        return anzahl;
    }

    public double getPreis()
    {
        return preis;
    }

}
Natürlich kann man hier noch ein hübschen Text mit ausgeben und ebenso ist diese Lösung nicht der Weisheit letzter Schuss, daher sollte es als Idee betrachtet werden ;)
 

Nyu

Mitglied
Ich bin der sehr dankbar dafür, allerdings.. Ist dies eine vorgefertigte Klasse bzw. 2. Eine Mit der Main und eine mit nur Methoden bzw. dem Konstruktor. Also ist hier vorgefertigt ein Array zu benutzen.

Daher auch meine Schwierigkeiten. Man sollte ebenfalls die Gruppen zusammen zählen also. Auto, Auto, Auto, Eis, Eis, Baum sind 3 Gruppen. Das habe ich wie folgt gelöst: (nachdem sie sortiert sind)


Java:
public int anzahlArtikelGruppen() {
        int gruppenAnz = 1;  
        for(int i = 0; i < artikelTabelle.length-1; i++) {      
            if(artikelTabelle[i].getArtikelGruppe().compareTo(artikelTabelle[i+1].getArtikelGruppe()) != 0) {          
                gruppenAnz++;          
            }      
        }  
        return gruppenAnz;
        }

Ich dachte ich kann das so ähnlich machen bei dem Problem was ich habe, aber dem ist nicht der Fall.

Ich soll ja z.B. bei Auto, Auto, Auto den Wert zusammen zählen.. Aber das was ich oben als Code schrieb ist auch nur "Müll".

Könntest du mir da vielleicht nochmal helfen? Also ich soll wirklich unbedingt so etwas benutzen, und davon ausgehen das die Artikel nach den Gruppen sortiert sind. also, Auto, Auto, Baum, Eis, etc..

Tl;dr: Ich brauche eine Methode um den GesamtWert der einzelnen Gruppen zu errechnen und auszugeben.
*Edit*: Ich bin an ein Array gebunden, und mir fehlt eig. nur noch diese eine Methode.
 

Javinner

Top Contributor
Ich soll ja z.B. bei Auto, Auto, Auto den Wert zusammen zählen...
Ich brauche eine Methode um den GesamtWert der einzelnen Gruppen zu errechnen und auszugeben...
Klasse Kiosk, getWert(), getPreis().
Ich habe hier ein Enum benutzt:
Java:
enum Auswahl
{
    GRUPPE, ARTIKEL, NUMMER, ANZAHL, PREIS;
}
So wird, je nach dem, was als Parameter mit übergeben wurde, zusammengezählt o.ä.
Der switch muss natürlich noch ausgebaut werden.
 

Nyu

Mitglied
Ja aber ich darf dies nicht benutzen, ich soll den Wert vom Bestand der Gruppen in einer Methode berechnen.
Ich habe 2 Dateien. (Vorgefertigt und die sollten wir erweitern) Ich weiß nicht soll ich jetzt die 2 x ca. 150 Zeilen Code hier rein posten? Wäre vielleicht doch ein wenig viel oder?
 

Nyu

Mitglied
Die Artikel.java mit den Get/Set Methoden

Java:
public class Artikel {

   // Deklaration der Variablen
   private String artikelGruppe;
   private String artikelName;
   private int    artikelNummer;
   private int    anzahlArtikel;
   private double einkaufsPreis;

   /**
    * leerer Konstruktor zur Initialisierung der Attribute
    */
        public Artikel(){
 
        artikelGruppe = "";
        artikelName = "";
        artikelNummer = 0;
        anzahlArtikel = 0;
        einkaufsPreis = 0;
    
    }
 
 
   /**
    * Konstruktor mit Uebergabeparametern zur Initialisierung der Attribute
    */
   public Artikel(String artGruppe, String artName, int artNummer,
                  int anzArtikel, double eK){
   
       this.artikelGruppe = artGruppe;
       this.artikelName = artName;
       this.artikelNummer = artNummer;
       this.anzahlArtikel = anzArtikel;
       this.einkaufsPreis = eK;
         
   }

   /**
    * Speichern der Artikelgruppe
    */
   public void setArtikelGruppe(String artikelGruppe) {
   
       this.artikelGruppe = artikelGruppe;
   
   }
   /**
    * Lesen der Artikelgruppe
    * @return artikelGruppe des Artikels
    */
   public String getArtikelGruppe() {
   
       return artikelGruppe;
   
   }
 
   /**
    * Speichern des Artikelnamens
    */

   public void setArtikelName(String artikelName) {
       this.artikelName = artikelName;
   
   }
 
 
   /**
    * Lesen des Artikelnamens
    * @return artikelName des Artikels
    */
   public String getArtikelName() {
   
       return artikelName;
   }
 
   /**
    * Speichern der Artikelnummer
   */
   public void setArtikelNummer(int artikelNummer) {
       this.artikelNummer = artikelNummer;
   
   }
 
   /**
    * Ermittlung der Artikelnummer
    * @return artikelNummer des Artikels
    */
   public int getArtikelNummer() {
 
    return artikelNummer;
   }
 
   /**
    * Speichern der Artikelanzahl
    */
   public void setAnzahlArtikel(int artikelAnzahl) {
       this.anzahlArtikel = artikelAnzahl;
   
   }

   /**
    * Ermittlung des Bestands des Artikels
    */
   public int getAnzahlArtikel() {
   
       return anzahlArtikel;
   }
 
   /**
    * Speichern der Einkaufspreises
    */
   public void setEinkaufsPreis(double einkausPreis) {
   
       this.einkaufsPreis = einkausPreis;
   }
 
   /**
    * Ermittlung der Einkaufspreises fuer den betreffenden Artikel
    */
   public double getEinkaufsPreis() {
   
       return einkaufsPreis;
   }

}

Die StartArtikelVerwaltung.java mit der Main und den Methoden:

Java:
import java.util.Scanner;


/**
* Die Klasse nutzt die zusaetzliche Klasse Artikel, um die Artikelobjekte
* zu verwalten. Zum Speichern und Bearbeiten mehrerer Artikel wird ein
* Array of Artikel eingesetzt. Die Methoden zum Zugriff auf das Array,
* um die Wuensche des Kioskbesitzers zu erfuellen sind Objekt-Methoden.
* Dazu wird zunaechst ein Objekt der Klasse  ArtikelVerwaltung erzeugt.
*/

public class StartArtikelVerwaltung {

   // Anzahl der einzugebenden Artikel
   int    anzahlEingabeArtikel = 4;
   // Das Array zum Speichern der Artikelobjekte
   Artikel[] artikelTabelle = new Artikel[anzahlEingabeArtikel];
   /**
    * main-Methode zum Starten des Programms.
    * Zuerst wird hier das Objekt verwaltung vom Typ ArtikelVerwaltung erzeugt,
    * um damit auf seine Methoden zur Loesung der Aufgabenstellung zuzugreifen.
    * @param args Kommandozeilenparameter werden nicht genutzt
    */
   public static void main(String[] args) {
      // Instantiierung des Objektes verwaltung vom Typ ArtikelVerwaltung
      StartArtikelVerwaltung verwaltung = new StartArtikelVerwaltung();
   
      // Deklaration der diversen Variablen
         int    artikelGruppen           = 0;  
         int    anzahlArtikelArten       = 0;
         int    anzahlArtikel            = 0;
         double ekPreisGesamt            = 0;

      // Einlesen aller Artikel
      verwaltung.einlesenTabellenWerte();
      // Ausgabe aller Artikel
      verwaltung.ausgabeTabelle();

  
      // Ermitteln der Anzahl der verschiedenen Artikel
      anzahlArtikelArten = verwaltung.verschiedeneArtikel();
      // Ausgabe der Anzahl der verschiedenen Artikel
      System.out.println("In der Tabelle befinden sich "
                          + anzahlArtikelArten + " verschiedene Artikel.");

   
      // Ermitteln des Gesamtbestandes an Artikeln
      anzahlArtikel = verwaltung.artikelBestand();
      // Ausgabe der gesamten Anzahl aller Artikel
      System.out.println("Der Artikelbestand umfasst " + anzahlArtikel
                          + " Artikel.");
  
   
      // Ermitteln des Einkaufspreises für alle Artikel im Bestand
      ekPreisGesamt = verwaltung.gesamtWert();
      // Ausgabe des Einkaufspreises aller Artikel im Bestand
      System.out.println("Der Artikelbestand einen Einkaufswert von "
                          + ekPreisGesamt + " €");
  
   
      // Ermitteln der Anzahl der Artikelgruppen
      artikelGruppen = verwaltung.anzahlArtikelGruppen();
      // Ausgabe der Anzahl der Artikelgruppen im Bestand
      System.out.println("Es gibt " + artikelGruppen
                         + " Gruppen von Artikeln im Bestand.");

   // Ermitteln des Bestandes und des Bestandswertes in jeder Artikelgruppe   
      // Ausgabe des Bestandes und des Bestandswertes in jeder Artikelgruppe
      verwaltung.artikelGruppenBestandWert();
         
   
   // Aufsteigendes Sortieren des Bestandes nach den Artikelgruppen
      verwaltung.alphabetischGruppenSortieren();
      // Ausgabe des nach den Artikelgruppen aufsteigend sortierten Bestandes
      System.out.println("Warenbestand sortiert nach den Artikelgruppen.");
      verwaltung.ausgabeTabelle();
   
        
      // Aufsteigendes Sortieren des Bestandes nach den Artikelnamen
      verwaltung.alphabetischArtikelNamenSortieren();
      // Ausgabe des nach den Artikelnamen aufsteigend sortierten Bestandes
      System.out.println("Warenbestand sortiert nach den Artikelnamen.");
      verwaltung.ausgabeTabelle();
   }
 
   /**
    * Einlesen der Artikel in die Tabelle
    * Erzeugen eines Artikelobjektes durch Tastatureingabe von Artikelnummer
    * und Anzahl als ganzzahlige Eingaben und dem Einkaufspreis als reeller Zahl.
    * Das neue Artikelobjekt wird in der Tabelle gespeichert.
    */
   public void einlesenTabellenWerte() {
      Scanner eingabe = new Scanner(System.in);
      System.out.println("Eingabe von Artikelgruppe, Artikelname, Artikelnummer, "
                           + " Artikel, EK in €");
      System.out.println("Alle Werte durch Leerzeichen getrennt in einer Zeile");
      for (int i = 0; i < anzahlEingabeArtikel; i++) {
         System.out.println("Daten fuer den " + (i + 1) +" - Artikel eingeben: ");
         Artikel artikel = new Artikel();
         artikel.setArtikelGruppe(eingabe.next());
         artikel.setArtikelName(eingabe.next());
         artikel.setArtikelNummer(eingabe.nextInt());
         artikel.setAnzahlArtikel(eingabe.nextInt());
         artikel.setEinkaufsPreis(eingabe.nextDouble());
         artikelTabelle[i] = artikel;
      }
      eingabe.close();
    }


    /**
     * Fuenfspaltige Ausgabe der gesamten Tabelle
     */
    public void ausgabeTabelle() {
       System.out.println("Ausgabe  Artikelbestandes: Artikelgruppe, Artikelname, "
                             + " Artikelnummer, Artikel, EK in €");
       for (int i = 0; i < artikelTabelle.length; i++) {
          System.out.print(artikelTabelle[i].getArtikelGruppe() + "   " +
                           artikelTabelle[i].getArtikelName() + "   " +
                           artikelTabelle[i].getArtikelNummer() + "   " +
                           artikelTabelle[i].getAnzahlArtikel() + "   " +
                           artikelTabelle[i].getEinkaufsPreis());
          System.out.println();
       }
    }
 

    /**
     * Die Laenge der Tabelle gibt hier Aufschluss ueber die Anzahl verschiedener Artikel.
     * @return artikelTabelle.length Die Tabellenlaenge
     */
    public int verschiedeneArtikel() {
       return artikelTabelle.length;
    }
 
    /**
     * Aufsummieren der jeweiligen Anzahlen der einzelnen Artikel
     */

    public int artikelBestand() {
        int anzahl = 0;
        for (int i = 0; i < artikelTabelle.length; i++) {
           anzahl = anzahl + artikelTabelle[i].getAnzahlArtikel();
        }
        return anzahl;
      }
 
    /**
     * Aufsummiert wird der Einkaufswert aller im Kiosk befindlichen Artikel
     */
    public double gesamtWert() {
        double gesamtWert = 0.0;
        for (int i = 0; i < artikelTabelle.length; i++) {
           gesamtWert = gesamtWert + artikelTabelle[i].getEinkaufsPreis();
        }
        return gesamtWert;
      }
 
 
    /**
     * Methode zum Ermitteln der Anzahl der Artikelgruppen
     * Diese Methode setzt voraus, dass der Bestand vorher nach den
     * Artikelgruppen sortiert worden ist.
     */
 
    public int anzahlArtikelGruppen() {
        int gruppenAnz = 1;
        for(int i = 0; i < artikelTabelle.length-1; i++) {    
            if(artikelTabelle[i].getArtikelGruppe().compareTo(artikelTabelle[i+1].getArtikelGruppe()) != 0) {        
                gruppenAnz++;        
            }    
        }
        return gruppenAnz;
        }
 
 
    /**
     * Methode zum Ermitteln und der Ausgabe des Bestandes
     * und des Bestandswertes in den einzelnen Artikelgruppen
     * Diese Methode setzt voraus, dass der Bestand vorher nach den
     * Artikelgruppen sortiert worden ist.
     */
    public void artikelGruppenBestandWert(){
        for (int i = 0; i < verschiedeneArtikel.length; i++){
            double total = 0;
            if (verschiedeneArtikel[i] != null){
                for (int j = 0; j < artikelTabelle.length; j++){
                    if (verschiedeneArtikel[i].equals(artikelTabelle[j].getArtikelGruppe())){
                        total = total + artikelTabelle[j].getAnzahlArtikel()*artikelTabelle[j].getEinkaufsPreis();
                    }
                }
            System.out.println("Gesamter Warenwert der Artikelgruppe: " + verschiedeneArtikel[i] + " = " + total );
            total = 0;
            }
        }
    }
 
 
 
 
   /**
    * Private Methode zum alphabetischen zyklischen Tauschen
    * zweier Artikel nach der Artikelgruppe
    */
 
    private void zyklischAlphabetischGruppeTauschen(int i){
    
        Artikel tmp;
        for(i = 0; i < artikelTabelle.length-1; i++) {
            if(artikelTabelle[i].getArtikelGruppe().compareTo(artikelTabelle[i+1].getArtikelGruppe()) > 0) {
                tmp = artikelTabelle[i];
                artikelTabelle[i] = artikelTabelle[i+1];
                artikelTabelle[i+1] = tmp;
      
            }
        }
    
    }
 
   /**
    * Alphabetisches Sortieren des Warenbestandes nach den Artikelgruppen
    */

    public void alphabetischGruppenSortieren(){

        for(int i = 0; i < artikelTabelle.length; i++) {
            zyklischAlphabetischGruppeTauschen(i);
        
        }
            
}
 
 
   /**
    * Private Methode zum alphabetischen zyklischen Tauschen
    * zweier Artikel nach dem Artikelnamen
    */
    private void zyklischAlphabetischArtikelNamenTauschen(int i){
        
            Artikel tmp;
            for(i = 0; i < artikelTabelle.length-1; i++) {
                if(artikelTabelle[i].getArtikelName().compareTo(artikelTabelle[i+1].getArtikelName()) > 0) {
                    tmp = artikelTabelle[i];
                    artikelTabelle[i] = artikelTabelle[i+1];
                    artikelTabelle[i+1] = tmp;
          
                }
            }
        
        }
 
 
 
 
   /**
    * Alphabetisches Sortieren des Warenbestandes nach den Artikelnamen
    */

    public void alphabetischArtikelNamenSortieren(){
 
        for(int i = 0; i < artikelTabelle.length; i++) {
            zyklischAlphabetischArtikelNamenTauschen(i);
        
        }
            
    }

}

Hoffe das Funktioniert alles so wie gehofft.

Wie gesagt ich brauche eig. nur noch die "gesamtGruppeBestandWert" Methode und die ist bis jetzt falsch.
 
Zuletzt bearbeitet:

Javinner

Top Contributor
Nach dem ich den Code ohne mein Zutun laufen lies:
Java:
Eingabe von Artikelgruppe, Artikelname, Artikelnummer,  Artikel, EK in €
Alle Werte durch Leerzeichen getrennt in einer Zeile
Daten fuer den 1 - Artikel eingeben:
Auto Audi 2222 5 10
Daten fuer den 2 - Artikel eingeben:
Auto BMW 1111 2 20
Daten fuer den 3 - Artikel eingeben:
Eis Vanile 3333 5 5
Daten fuer den 4 - Artikel eingeben:
Baum Fichte 6666 1 10
Ausgabe  Artikelbestandes: Artikelgruppe, Artikelname,  Artikelnummer, Artikel, EK in €
Auto   Audi   2222   5   10.0
Auto   BMW   1111   2   20.0
Eis   Vanile   3333   5   5.0
Baum   Fichte   6666   1   10.0
In der Tabelle befinden sich 4 verschiedene Artikel.
Der Artikelbestand umfasst 13 Artikel.
Der Artikelbestand einen Einkaufswert von 45.0 €
Es gibt 3 Gruppen von Artikeln im Bestand.
Warenbestand sortiert nach den Artikelgruppen.
Ausgabe  Artikelbestandes: Artikelgruppe, Artikelname,  Artikelnummer, Artikel, EK in €
Auto   Audi   2222   5   10.0
Auto   BMW   1111   2   20.0
Baum   Fichte   6666   1   10.0
Eis   Vanile   3333   5   5.0
Warenbestand sortiert nach den Artikelnamen.
Ausgabe  Artikelbestandes: Artikelgruppe, Artikelname,  Artikelnummer, Artikel, EK in €
Auto   Audi   2222   5   10.0
Auto   BMW   1111   2   20.0
Baum   Fichte   6666   1   10.0
Eis   Vanile   3333   5   5.0

Wenn ich es richtig sehe, fehlt dir nur das hier:
Ich brauche eine Methode um den GesamtWert der einzelnen Gruppen zu errechnen und auszugeben.
 

Nyu

Mitglied
Genau, das ist soweit das einzige was fehlt, ursprünglich waren es auch 17 Eingaben, allerdings habe ich dies auf 4 heruntergesetzt um es erstmal zutesten. Und diese eine Methode fehlt mir nun halt noch und ich habe nicht wirklich eine Idee, außer das was ich oben bereits geschrieben habe. War auch schon erleichtert das es mit der GruppenAnzahl Methode so funktionierte in diesem 5 Zeiler.

Und bei gesamtWert() ist mir ein Fehler unterlaufen, da fehlt das artikelTabelle.getArtikelAnzahl * artikelTabelle.getEinkaufsPreis
es sollen nämlich alle Artikel im Kiosk aufsummiert werden. Ist aber nun behoben.
 
Zuletzt bearbeitet:

Javinner

Top Contributor
und ich habe nicht wirklich eine Idee
String gruppe = artikelTabelle[0].getArtikelGruppe();
Solange du durch das Array artikelTabelle iterierst und der jeweilige Index die equals-Bedienung erfühlt, speichere a) die Anzahl der Artikel und b) den Preis der Artikel in Variablen. Wenn die Bedingung nicht mehr erfühlt ist, merke dir den Index, Ausgabe, neue Zuweisung des String gruppe(gemerkter Index), wiederhole.

Versuch es mal
 

Nyu

Mitglied
Ich habe da mal ein bisschen was gebastelt, weiter komme ich nicht so ganz.

Java:
public void artikelGruppenBestandWert(){
            String gruppe = artikelTabelle[0].getArtikelGruppe();
            int anzArtikel = 0;
            double preisGruppe = 0;
       
            for(int i = 0 ; i  < artikelTabelle.length; i++) {
 //Ich glaube du meinst eher for(int i : artikelTabelle), aber das geht nicht. (Falls du das überhaupt meinst)
                if(artikelTabelle[i].getArtikelGruppe().equals(gruppe)){
               
                    anzArtikel = artikelTabelle[i].getAnzahlArtikel();
                    preisGruppe = artikelTabelle[i].getEinkaufsPreis();
                   
                }
                else if(!artikelTabelle[i].getArtikelGruppe().equals(gruppe)) {
                       //Merke Index?
                        System.out.println("Gesamtwert: " + artikelTabelle[i].getArtikelGruppe() + ", betraegt : " + anzArtikel*preisGruppe);
                        gruppe = artikelTabelle[i].getArtikelGruppe();
                    }
           
            }
       
        }

Das mit dem "Merke dir den Index habe ich noch nicht ganz verstanden, wie ich das machen soll". Bei der If bin ich mir auch nicht so sicher.

Ja klar vielen Dank, ich hoffe du kannst später noch mal rein gucken. Gegen Nachmittag oder sowas. :) Bis dahin danke.
 
Zuletzt bearbeitet:

truesoul

Top Contributor
Hallo.

Also eigentlich ist es recht simple.
Du hast eine sortiertes Array, richtig?

Du willst die Anzahl der Gruppen erhalten?

Pseudocode:

Code:
int count = 0
String lastEntry = ""

For Artikel artikel : array_aller_artikel
    IF artikel.gruppe nicht gleich lastEntry
        dann zähle count einen hoch
        und speicher artikel.gruppe in lastEntry
    IF END  
For End  

RETURN count

Es würde mit HashSet noch ein wenig einfacher sein. Oder du könntest eine Map verwenden und hast somit die Anzahl der Gruppe und zusätzlich wieviel Einheiten je Gruppe.

Grüße
 

Nyu

Mitglied
Hallo @truesoul !
Ich glaube du hast da etwas missverstanden, kann das sein? Die Methode, welche die Gruppen zusammen zählt, also die anzahl, habe ich bereits. Und diese funktioniert auch wunderbar.

Mir fehlt lediglich die Methode, welche jeweils nur für die Gruppen den Preis errechnet. Siehe oben, was ich versucht habe, nach dem mir @Javinner diesen Tipp gab, aber als ich da oben es versucht habe kam ich nicht weiter. Denn entweder ich int i : artikelTabelle ist falsch, oder Artikel i : artikelTabelle ist richtig, dann kann ich diesen aber nicht mehr als Index verwenden?

Ich bekomme Probleme sobald ich
Java:
for(int i : artikelTabelle){
anzArtikel = artikelTabelle[i].getAnzahlArtikel();
}
//artikelTabelle cannot convert from type Artikel to int
//Wenn ich "Artikel i : artikelTabelle" schreibe, dann geht es auch nicht.
 
Zuletzt bearbeitet:

truesoul

Top Contributor
Hallo.

Ja habe es missverstanden.

Also das ist eigentlich auch recht simple.

Code:
int gitSumme(gruppe) {

int sum = 0

For Artikel artikel : array_aller_artikel
    IF artikel.gruppe gleich gruppe
        dann summiere sum mit artikel.preis
       
    IF END 
For End 

gib sum zurück
}

Hoffe das ist was du suchst.
 

Nyu

Mitglied
Java:
public void artikelGruppenBestandWert(){
            String gruppe = artikelTabelle[0].getArtikelGruppe();
            int anzArtikel = 0;
            double preisGruppe = 0;
           
           
                for(int i : artikelTabelle) {
                    if(artikelTabelle[i].getArtikelGruppe().equals(gruppe)){
                       
                        anzArtikel = artikelTabelle[i].getAnzahlArtikel();
                        preisGruppe = artikelTabelle[i].getEinkaufsPreis();
                           
                    }
                    else if(!artikelTabelle[i].getArtikelGruppe().equals(gruppe)) {
                            gruppe = artikelTabelle[i].getArtikelGruppe();
                            System.out.println("Gesamtwert: " + artikelTabelle[i].getArtikelGruppe() + ", betraegt : " + anzArtikel*preisGruppe);
                            gruppe = artikelTabelle[i].getArtikelGruppe();
                        }
                   
                }
       
        }

So etwas ähnliches habe ich ja, dank @Javinner . Aber ich weiß nicht ganz was du mit array_aller_Artikel meinst? In diesem Fall wohl "artikelTabelle" weil dies das Array ist.

Allerdings soll ich nicht die Summe zurückgeben, sondern dort in einem print verarbeiten, so das es gleich ausgegeben wird.

Wie gesagt wenn ich oben das "int i" zu "artikel i" ändere weiß ich nicht wie ich dann die "indexe" anspreche, z.B.
Java:
anzArtikel = artikelTabelle[i].getAnzahlArtikel();
das funktioniert dann dort nicht mehr, weil "Artikel i" kein int ist.
 

truesoul

Top Contributor
Hallo.

Also im if Block solltest du anzArtikel summieren mit artikelTabelle.getAnzahlArtikel().

Der Einkaufspreis wird sich bei der selben Gruppe nicht unterscheiden oder?

Im else if Block verwendest du dann den Wert aus der Variable gruppe, anzArtikel und preisGruppe für die Ausgabe.
Nach der Ausgabe setzt du die Variable gruppe mit der aktuellen ArtikelGruppe.
anzArtikel musst du auf 0 setzen und preisgruppe setzt du auch neu.

Grüße
 

Nyu

Mitglied
Ja das mit dem aufsummieren habe ich auch vorhin gesehen, habe das + vergessen. Und ja das tut es, soweit ich deine Frage verstehe. Den z.B. Eis,Schoko kann einen Preis von 200€ haben. (10*20) und Eis,Erdbeere einen Preis von 500(10*50).

daraus soll dann "Gesamtwert der Gruppe Eis ist: 700€" werden.

Ich habe das hier aktuell :
Java:
public void artikelGruppenBestandWert(){
            String gruppe = artikelTabelle[0].getArtikelGruppe();
            int anzArtikel = 0;
            double preisGruppe = 0;
                       
                for(int i = 0; i < artikelTabelle.length; i++){
                    if(artikelTabelle[i].getArtikelGruppe().equals(gruppe)){
                           
                        anzArtikel = anzArtikel + artikelTabelle[i].getAnzahlArtikel();
                        preisGruppe = preisGruppe + artikelTabelle[i].getEinkaufsPreis();
                               
                        }
                        else if(!artikelTabelle[i].getArtikelGruppe().equals(gruppe)) {
                               
                            System.out.println("Gesamtwert: " + artikelTabelle[i-1] + ", betraegt : " + anzArtikel*preisGruppe);
                            gruppe = artikelTabelle[i].getArtikelGruppe();
                            anzArtikel = 0;
                            preisGruppe = 0;
                            }
                       
                       
                    }
               
        }
 

Nyu

Mitglied
Nein immer noch nicht.
Das ist mein Aktueller Code:
Java:
public void artikelGruppenBestandWert(){
            String gruppe = artikelTabelle[0].getArtikelGruppe();
            int anzArtikel = 0;
            double preisGruppe = 0;
            double gesamtPreis = 0;
                       
                for(int i = 0; i < artikelTabelle.length; i++){
                    if(artikelTabelle[i].getArtikelGruppe().equals(gruppe)){
                           
                        anzArtikel = anzArtikel + artikelTabelle[i].getAnzahlArtikel();
                        preisGruppe = preisGruppe + artikelTabelle[i].getEinkaufsPreis();
                       
                        gesamtPreis += anzArtikel*preisGruppe;   
                        }
                        else if(!artikelTabelle[i].getArtikelGruppe().equals(gruppe)) {
                                                       
                            System.out.println("Gesamtwert: "  + gruppe + ", betraegt : " + gesamtPreis);
                            gruppe = artikelTabelle[i].getArtikelGruppe();
                            anzArtikel = 0;
                            preisGruppe = 0;
                            }
                       
                       
                    }
               
        }

Ausgabe dazu :
Code:
Eingabe von Artikelgruppe, Artikelname, Artikelnummer,  Artikel, EK in €
Alle Werte durch Leerzeichen getrennt in einer Zeile
Daten fuer den 1 - Artikel eingeben:
Eis
Schoko
001
20
50
Daten fuer den 2 - Artikel eingeben:
Eis
Erdbeer
002
40
10
Daten fuer den 3 - Artikel eingeben:
Auto
VW
003
20
30
Daten fuer den 4 - Artikel eingeben:
Auto
Audi
004
10
20
Ausgabe  Artikelbestandes: Artikelgruppe, Artikelname,  Artikelnummer, Artikel, EK in €
Eis   Schoko   1   20   50.0
Eis   Erdbeer   2   40   10.0
Auto   VW   3   20   30.0
Auto   Audi   4   10   20.0
In der Tabelle befinden sich 4 verschiedene Artikel.
Der Artikelbestand umfasst 90 Artikel.
Der Artikelbestand einen Einkaufswert von 2200.0 €
Es gibt 2 Gruppen von Artikeln im Bestand.
Gesamtwert: Eis, betraegt : 4600.0
Warenbestand sortiert nach den Artikelgruppen.
Ausgabe  Artikelbestandes: Artikelgruppe, Artikelname,  Artikelnummer, Artikel, EK in €
Auto   VW   3   20   30.0
Auto   Audi   4   10   20.0
Eis   Schoko   1   20   50.0
Eis   Erdbeer   2   40   10.0
Warenbestand sortiert nach den Artikelnamen.
Ausgabe  Artikelbestandes: Artikelgruppe, Artikelname,  Artikelnummer, Artikel, EK in €
Auto   Audi   4   10   20.0
Eis   Erdbeer   2   40   10.0
Eis   Schoko   1   20   50.0
Auto   VW   3   20   30.0
 

truesoul

Top Contributor
Ist das Array korrekt sortiert nach Gruppe?
Weil wenn nicht bringt die Schleife natürlich nichts.

Darfst du Maps verwenden?

anzArtikel = 0; // muss auf die aktuelle anzahl gesetzt werden
preisGruppe = 0; // muss auf die aktuellen preis gesetzt werden
 

Nyu

Mitglied
Sollte es eigentlich ja, da sonst die Zeile darüber nicht funktioniert das dort "2 Gruppen sind".

Nein darf ich nicht.

Das erscheint mir nicht ganz so okay, denn dort habe ich lediglich gesagt das wenn eine ArtikelGruppe ausgegeben wird, das dann auch die anzArtikel und preisGruppe wieder zurückgesetzt werden, für die nächste Gruppe. Das funktioniert aber nicht.

Ich habe es jetzt hinbekommen das er z.B. für das Eis es berechnet aber immer noch für eine Gruppe.

Java:
public void artikelGruppenBestandWert(){
            String gruppe = artikelTabelle[0].getArtikelGruppe();
            int anzArtikel = 0;
            double preisGruppe = 0;
           
                       
                for(int i = 0; i < artikelTabelle.length; i++){
                    if(artikelTabelle[i].getArtikelGruppe().equals(gruppe)){
                           
                        anzArtikel = anzArtikel + artikelTabelle[i].getAnzahlArtikel();
                        preisGruppe = preisGruppe + artikelTabelle[i].getAnzahlArtikel() * artikelTabelle[i].getEinkaufsPreis();
            
                        }
                        else if(!artikelTabelle[i].getArtikelGruppe().equals(gruppe)) {
                                               
                            System.out.println("Gesamtwert: "  + gruppe + ", betraegt : " + preisGruppe);
                            gruppe = artikelTabelle[i].getArtikelGruppe();
                            anzArtikel = 0;
                            preisGruppe = 0;
                            }
                       
                       
                    }
               
        }

Jetzt kommt z.B. :Gesamtwert: Eis, betraegt : 400.0

Die Zeile für z.B. Auto fehlt jetzt.
 

Nyu

Mitglied
Ich weiß nicht ganz was du von mir ganz verlangst. Wenn ich das Elseif weg mache und dann das Sysout einfach so lasse, dann gibt er doch so oft wie viele Artikel man eingibt das Sysout aus, z.B. 5 mal. Und wenn ich das Sysout ans Außerhalb der For mache gibt er es nur einmal aus.

bei z.B. 9 Artikeln und jeweils 3 Gruppen, soll er ja nur 3 Sysouts haben, nicht 9.

Edit: Ich denke wenn es nicht anders geht ja, allerdings muss es doch auch in einer Methode zulösen sein, sonst würde die Aufgabenstellung ja vorsehen, dass man eine neue Methode machen soll. Ich denke daher ist es eig. sehr ungerne gesehen eine neue zu machen.
 
Zuletzt bearbeitet:

truesoul

Top Contributor
Java:
public void artikelGruppenBestandWert() {
    String gruppe = artikelTabelle[0].getArtikelGruppe();

    for (int i = artikelTabelle.length -1; i >= 0; i--) {
        if (!artikelTabelle[i].getArtikelGruppe().equals(gruppe)) {
            System.out.println(gibGesamtSummeVonGruppe(gruppe, artikelTabelle));
         
            gruppe = artikelTabelle[i].getArtikelGruppe();
        }
    }

}

private double gibGesamtSummeVonGruppe(String gruppe, Artikel [] artikelTabelle) {
    int sum = 0;
    for (int i = artikelTabelle.length -1; i >= 0; i--) {
        if (artikelTabelle[i].getArtikelGruppe().equals(gruppe)) {
            sum += artikelTabelle[i].getAnzahlArtikel() * artikelTabelle[i].getEinkaufsPreis();
        }
    }
    return sum;
}

Oder

Java:
public void artikelGruppenBestandWert() {
    String gruppe = artikelTabelle[0].getArtikelGruppe();
    double sum = artikelTabelle[0].getAnzahlArtikel() * artikelTabelle[0].getEinkaufsPreis();
 
    for (int i = 1; i < artikelTabelle.length ; i++) {
        if (!artikelTabelle.getArtikelGruppe().equals(gruppe)) {
            System.out.println(gruppe+":"+sum);
       
            gruppe = artikelTabelle.getArtikelGruppe();
            sum = artikelTabelle.getAnzahlArtikel() * artikelTabelle.getEinkaufsPreis();
        } else {
            sum += artikelTabelle.getAnzahlArtikel() * artikelTabelle.getEinkaufsPreis();              
        }
    }

}
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Gleiche Werte aus Array aussortieren Java Basics - Anfänger-Themen 5
L Gleiche Werte im Array hochzählen Java Basics - Anfänger-Themen 4
H überprüfen ob in Array gleiche int-Zahlen gespeichert werden. Java Basics - Anfänger-Themen 7
Y Gleiche Arrays aus einem Array mit Objekten Java Basics - Anfänger-Themen 5
B 2D-Array, gleiche Einträge prüfen Java Basics - Anfänger-Themen 5
N Threads: 4 Threads, 4mal Zugriff auf Array soll nicht der gleiche Zugriff sein Java Basics - Anfänger-Themen 4
O Zweidemensionales Array auf zwei gleiche Zahlen prüfen Java Basics - Anfänger-Themen 15
G Zählen gleiche Werte in Array Java Basics - Anfänger-Themen 5
K Neue Werte für gleiche Array-Indexe Java Basics - Anfänger-Themen 16
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
A CSv.Datei einlesen und die werte in zweidemosional Int Array speichern Java Basics - Anfänger-Themen 9
M Methoden Zweidimensionaler Array mit Setter Methode ändern Java Basics - Anfänger-Themen 4
AkiJou Zeile in 2d Array löschen Java Basics - Anfänger-Themen 2
LilliCherry Array in einer Zeile ausgeben Java Basics - Anfänger-Themen 6
A Elemente in einem Array Java Basics - Anfänger-Themen 5
A Vorkommende Farben ermittel und als Array zurückgeben Java Basics - Anfänger-Themen 7
AhmadSlack Array Java Basics - Anfänger-Themen 7
Jambolo Kartenhand Array Java Basics - Anfänger-Themen 14
ravenz Schleife mit for über String Array „zahlen“und prüfen ob Wert „a“ oder „b“ oder „c“ entspricht (mittels || ) Java Basics - Anfänger-Themen 4
S Eine Variable in einem Array speichern Java Basics - Anfänger-Themen 5
T Methode, die prüft ob in einem Int-Array maximal 2 Zahlen enthalten sind, die größer als ihr Vorgänger sind Java Basics - Anfänger-Themen 5
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
krgewb byte-Array, das ein Bild repräsentiert Java Basics - Anfänger-Themen 1
1 Array rekursiv durchlaufen Java Basics - Anfänger-Themen 8
I Methoden Wieso wird mein Array "a" verändert und meine Variable "a" nicht? Java Basics - Anfänger-Themen 4
EykS 3D Druckdatei basierend auf 3D Array? Java Basics - Anfänger-Themen 3
sserio Array funktioniert nicht Java Basics - Anfänger-Themen 2
sserio Iterierung über ein zweidimensionales Array Java Basics - Anfänger-Themen 16
sserio Zweidimensionales Array [][] wird untereinander ausgegeben Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben