Array Summe bestimmen?

Mico93

Mitglied
Ich bin seit Tagen am Verzweifeln.Es geht darum,dass ich aus einer CSV-Datei Elemente eines Arrays nach bestimmten Kriterien zählen und dann in einer abschließenden Statistik darstellen möchte.

Das Kriterium lautet,dass aus dem Array von Noten,die in Punkten dargestellt sind,ich diese in die Kategorie:

Gesamtzahl aller Teilnehmer,die den Test mit einer 1 bestanden haben,die zwischen 100-88 Punkten bestanden haben

Gesamtzahl aller Teilnehmer,die den Test mit einer 2 bestanden haben,die zwischen 87-73 Punkten bestanden haben

Gesamtzahl aller Teilnehmer,die den Test mit einer 3 bestanden haben,die zwischen 72-58 Punkten bestanden haben

Gesamtzahl aller Teilnehmer,die den Test mit einer 4 bestanden haben,die zwischen 57-50 Punkten bestanden haben

Und eben die Anzahl an Teilnehmern,die den Test nicht bestanden haben.

Jetzt ist es so,dass er mir die CSV-Datei einwandfrei einliest,aber ich bei der Addition aller Teilnehmer Probleme habe,da er mir die einzeln abzählt,sprich mir alle der Reihenfolge gestaffelt auflistet als sie in einer Gesamtzahl eines Arrays ausgibt. Zudem ist noch wichtig zu erwähnen,dass ich bei der Aufgabe maximal nur 3 Methoden werden darf.

Das heißt: CSV-Datei,Die Berechnung und die HTML Statistik.

edit: habe mich vor kurzem angemeldet,daher habe ich meine Grundproblematik leider nicht vollständig formulieren können,daher bitte ich um Nachsicht.

0_big.png


1_big.png


2_big.png
 

Mico93

Mitglied
@mihe7 erstmal danke für die freundliche und schnelle Rückmeldung.
Ich habe es mal ausprobiert und musste feststellen,dass er mir als Ausgabe das 4-fache an Antworten ausgibt mit den Fällen,die nicht zutreffen.
Ich habe es auch mit den array-Methoden probiert (array:liste),bin damit leider auch kläglich ums andere mal gescheitert -.-
Ausschnitt Ausgabe.PNG
 

mihe7

Top Contributor
Ich habe es mal ausprobiert und musste feststellen,dass er mir als Ausgabe das 4-fache an Antworten ausgibt mit den Fällen,die nicht zutreffen.
?!?

Zeig mal Deinen Code (poste aber bitte keinen Screenshot, sondern verwende die drei Punkte neben dem Smiley im Editor, dort auf Code, dann Java auswählen und in das Textfeld einfach den Code inkl. Einrückungen reinkopieren).
 
K

kneitzel

Gast
Kann es sein, dass die Ausgabe jetzt immer noch in der Schleife hinter den if Anweisungen sind?

Die Ausgabe soll komplett hinter die Schleife.
 

mihe7

Top Contributor
Ach, jetzt sehe ich gerade noch etwas: Du machst die Auswertung beim Einlesen nach jeder Zeile, verwendest aber lokale Variablen, das kann so nicht funktionieren.
 

Mico93

Mitglied
@mihe7 Alles klar vielen Dank:)
@JustNobody Sollte eigentlich so sein,auch dir danke für die Rückmeldung
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Abgabe {

    public static void main(String[] args) {
        
        String Speicherort = System.getProperty("user.home");
        Path Datei = Paths.get(Speicherort,"Notenliste.csv");
        
        try(BufferedReader br = Files.newBufferedReader(Datei)){
                String zeile= br.readLine();
                while((zeile = br.readLine())!=null)
                {
                String[]teile = zeile.split(",");
                int werte[]=new int[teile.length];
                for(int i=0;i<teile.length;i++)
                {
                werte[i]=Integer.parseInt(teile[i]);
                }
                
                Auswertung(werte);
                }
        }catch(IOException e) {
            System.out.println("Datei konnte nicht gefunden werden");
        }
    }
    
    public static void Auswertung(int [] werte) {
        
        int laenge=werte.length;
        int sehrgut=0;
        int gut=0;
        int befriedigend=0;
        int ausreichend =0;
        int nichtausreichend=0;
        
        for(int i=0;i<laenge;i++) {
               Integer arrElt =werte[i];
               if(arrElt>=88&&arrElt<=100)
               {
                   sehrgut++;
               }
               if(arrElt>=73&&arrElt<=87)
               {
                   gut++;   
               }
               if(arrElt>=58&&arrElt<=72)
               {
                   befriedigend++;
               }
               if(arrElt>=50&&arrElt<=57)
               {
                   ausreichend++;
                  
               }
               if(arrElt<50)
               {
                   nichtausreichend++;
                  
               }
           }
        System.out.println("Mit abgeschlossen mit sehr gut:"+sehrgut);
        System.out.println("Mit abgeschlossen mit gut:"+gut);
        System.out.println("Mit abgeschlossen befriedigend:"+befriedigend);
        System.out.println("Mit abgeschlossen mit ausreichend:"+ausreichend);
        System.out.println("Mit abgeschlossen mit nicht ausreichend:"+nichtausreichend);
    }
}
 

mihe7

Top Contributor
Die Frage wäre für mich, ob Du einfach irgendeine Quick & Dirty Lösung brauchst, oder ob Du lernen willst, wie man so etwas objektorientiert angehen kann. Die Quick & Dirty-Lösung bestünde darin, die Variablen einfach in die Klasse zu ziehen und static zu machen (static ist übrigens der Feind der Objektorientierung). Nachtrag: das ist nur ein Teil der Lösung, da Du die Ausgabe selbst natürlich auch noch separat machen musst.
 

Mico93

Mitglied
Ich halte nicht viel von diesen Quick dirty Lösungen,da ich es nachhaltig versuchen möchte zu verinnerlichen und zu optimieren.Daher wäre mir die objektorientierte Variante deutlich lieber.
 
K

kneitzel

Gast
Mein Vorschlag wäre dann eine Klasse, in der Du Auswertungen durchführen und speichern kannst.

Also ohne jetzt groß nachzudenken wäre eine Idee: Klasse Auswertung.
Die Klasse bekommt Instanzvariablen countSehrGut, countGut, ....

Dann eine Methode addValues(Final String values), dabei ist values ein String, der einer Zeile entspricht. Das aufteilen der Noten findet da dann statt.

Ausgabe könnte da dann auch eine Methode sein.

Du könntest sogar readNotefromFile oder so haben.

Main würde dann eine Instanz erzeugen, readNotesFromFile mit Datei aufrufen und dann ausgeben oder so aufrufen.

Das kann man aber noch weiter vertiefen. Eine Enum Noten wäre noch interessant. Dann wäre der Counter eine Map von Note auf Integer. Das finden der richtigen Note wäre dann auch ein Code, der da zu finden wäre. Das wäre dann ein weiterer Schritt, es in mehrere Klassen auszuteilen.
 

mihe7

Top Contributor
OK, ich bleibe mal nah an Deinem Code und erkläre das erstmal anhand von zwei Klassen. Da die Aufgabe vorsieht, es mit drei Methoden zu erledigen, gehe ich mal davon aus, dass nur eine Klasse zu erstellen ist, daher werden wir das am Ende in eine Klasse zusammenführen, aber für das Verständnis sind zwei Klassen erstmal besser.

Du willst eine Notenstatistik erstellen, die für jede Notenstufe die Anzahl an Noten ermittelt, wobei es fünf Notenstufen gibt. Wenn Du eine neue Statistik erzeugst, sind alle Werte in der Statistik erst einmal 0 - logisch, sind ja noch keine Noten in die Statistik eingeflossen.

Hier sind zwei Dinge erkennbar: erstens kann man mehrere Objekte einer Klasse erzeugen, d. h. Du kannst auch tausend verschiedene Statistiken verwalten. Zweitens, Du musst die Statistik anhand gegebener Punkte irgendwie aktualisieren können - dafür brauchst Du eine Methode.

Damit könnte ein erster Schritt z. B. so aussehen:
Java:
public class Notenstatistik {
    private int sehrgut;
    private int gut;
    private int befriedigend;
    private int ausreichend;
    private int nichtausreichend;

    public void aktualisieren(int[] allePunkte) {
        for(int punkte : allePunkte) {
            if(punkte >= 88 && punkte <= 100) {
                sehrgut++;
            } else if(punkte >= 73 && punkte <= 87) {
                gut++;  
            } else if(punkte >= 58 && punkte <= 72) {
                befriedigend++;
            } else if(punkte >= 50 && punkte <= 57) {
                ausreichend++;
            } else if(punkte >= 0 && punkte < 50) {
                nichtausreichend++;
            } else {
               System.err.println("Ungültige Punktzahl: " + punkte);
            }
        }
    }
}
Tatsächlich würde man das noch weiter aufteilen, denn die Statistik kümmert sich aktuell um zwei Dinge: einmal um das die Aktualisierung der Statistik und einmal um die Abbildung von Punkte auf Noten. Das kann man wunderbar trennen, aber wir wollen es mal nicht zu kompliziert machen.

Jetzt fehlt noch eine Ausgabe, d. h. eine lesbare Darstellung der Statistik. Für diesen Zweck erbt jede Klasse automatisch die Methode toString() der Klasse Object. Diese Methode lässt sich überschreiben, also fügen wir der Klasse noch hinzu:
Java:
    @Override
    public String toString() {
        return "Abgeschlossen mit sehr gut: " + sehrgut + "\n" +
            "Abgeschlossen mit gut: " + gut + "\n" +
            "Abgeschlossen mit befriedigend: " + befriedigend + "\n" +
            "Abgeschlossen mit ausreichend: " + ausreichend + "\n" +
            "Nicht ausreichende Leistungen: " + nichtausreichend;
    }

Die Klasse kann nun folgendermaßen verwendet werden:
Java:
int[] punkte = {100, 80, 70, 60, 50, 40};
Notenstatistik statistik = new Notenstatistik(); // neue Statistik anlegen
statistik.aktualisieren(punkte); // Statistik aktualisieren
System.out.println(statistik); // Statistik ausgeben

Zum Beispiel kannst Du das in Deine Klasse einbauen:
Java:
import java.io.BufferedReader;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Abgabe {

    public static void main(String[] args) {      
        String speicherort = System.getProperty("user.home");
        Path datei = Paths.get(Speicherort,"Notenliste.csv");

        try(BufferedReader br = Files.newBufferedReader(datei)){
                Notenstatistik statistik = new Notenstatistik();
                String zeile= br.readLine();
                while((zeile = br.readLine())!=null) {
                    String[] teile = zeile.split(",");
                    int punkte[]=new int[teile.length];
                    for(int i=0; i < teile.length; i++) {
                        punkte[i]=Integer.parseInt(teile[i]);
                    }           
                    statistik.aktualisieren(punkte);
                }
                System.out.println(statistik);
        }catch(IOException e) {
            System.out.println("Datei konnte nicht gefunden werden");
        }
    }
}
Zwar ist das etwas, was man normalerweise auch nicht in main erledigt, aber wie oben: wir wollen es nicht zu kompliziert machen. Wenn Du jetzt hergehst und die main-Methode in die Klasse Notenstatistik kopierst (imports nicht vergessen), dann kannst Du die Klasse Abgabe entfernen und hast alles in einer Klasse mit insgesamt drei Methoden :) Vorausgesetzt, ich habe mich nirgends verschrieben :)

Der Punkt ist, dass man in der Objektorientierung mit Abstraktionen arbeitet. Wie oben geschrieben kannst Du nun Tausende solcher Statistiken erzeugen, wenn Du willst. Sie funktionieren alle gleich. In der Regel abstrahiert man noch weiter, damit eine Klasse noch universeller eingesetzt werden kann. Das erreicht man einerseits durch Trennung von Verantwortlichkeiten (die Klasse Notenstatistik erledigt ja mehrere Dinge, wie oben bereits erwähnt), andererseits durch eine andere Modellierung. So könnte man z. B. auf die Idee kommen und sich überlegen: was passiert, wenn ich sechs Notenstufen brauche? Wie lässt sich die Klasse so schreiben, dass sie unabhängig von der Zahl der Notenstufen funktioniert? Was ist, wenn die Bezeichnungen sich ändern sollen? Usw.
 

Mico93

Mitglied
Wow.
@mihe7 erstmal möchte ich Ihnen für diese umfangreiche Erklärung in Bezug auf mein Problem danken und für die umfangreiche und informative Aufarbeitung meines Problems.
Selten etwas fachdidaktisch gut aufbereitet gesehen. Für einen Newbie wie mich in der Java-Welt ist das goldwert neben dem Codierung,wohl positiv
Ich stimme Ihren Ausführung zur Aufteilung in mehreren Codes und teile Ihre Ansicht bezüglich der Abstraktion, da unter anderem auch neben der Verantwortungsaufteilung auch eine Form einer sauberen Darstellung einhergeht. Leider hat es-was ich an der Universitäts- und allgemeinen Schulvorgaben älterer Übungsaufgaben zur Erlernung der Sprache leider nicht hergab :/ In der freien Welt der Programmierung bewegt man sich freier und ist im Prinzip in der Kürze liegt die Würze und Achtung eines ressourcensparenden Programmierens.
Was ich auf jeden Fall begrüße ist,dass Sie nahe am Code geblieben sind,da ich nun ganz klar erkennen kann,was genau meine Probleme waren und ich sie nun Stück für Stück abarbeite und im wesentlichen jetzt auch darauf aufbauend mir darüber Gedanken machen kann,was noch stärker geschult werden soll.
Nochmals an Sie beide
@JustNobody
@mihe7
Ich kann mich nur nochmal wiederholen,danke für Ihre Einschätzungen,Tipps und Impressionen!
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Summe in einem Array bestimmen Java Basics - Anfänger-Themen 3
E Summe der "Nachbarn" eines Wertes in einem Array bestimmen Java Basics - Anfänger-Themen 8
N 2D Array Summe erstellen Java Basics - Anfänger-Themen 6
G Java 2-dimensionalen int-Array Summe Java Basics - Anfänger-Themen 2
M Array Summe- wo ist der Fehler ? Java Basics - Anfänger-Themen 13
L Array: Summe aller geraden und ungeraden Zahlen ermitteln Java Basics - Anfänger-Themen 9
M array - summe quer Java Basics - Anfänger-Themen 9
B array bestimmte summe berechnen Java Basics - Anfänger-Themen 4
E Array gebildete Summe ausgeben Java Basics - Anfänger-Themen 5
M Rekursion Summe vom Array Java Basics - Anfänger-Themen 2
U Summe produkt von einem array Java Basics - Anfänger-Themen 9
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

Ähnliche Java Themen

Neue Themen


Oben