2017-12-14 2 views
-1

Ein bisschen ein Anfänger mit Programmierung, also ertragen Sie mit mir.HashMap/ArrayList Mittelungsprogramm

Ich habe eine ArrayList innerhalb einer HashMap erstellt, so dass alle meine Werte zu einer Summe addiert werden können, so dass ich dann die Summe durch die Anzahl der Einträge in die ArrayList teilen kann, was mir meinen Durchschnitt geben würde ... das funktioniert alles gut AUSSER:

Mein erster Eintrag in meine ArrayList kommt immer wieder als 0,0 zurück, auch wenn ich in der GUI wie 45 eingeben oder was auch immer. Wie kann ich es ändern, so dass meine ArrayList 0 auf meinem ersten Eintrag setzt? Da ich ein Mittelungsprogramm erstellt habe, das funktionieren würde, wenn mein erster ArrayList-Eintrag den richtigen Eintrag abruft, wie es der 0 entgegengesetzt ist, wird sie jedes Mal zurückgebracht.

Hier ist mein Code:

public void addModRes(String mod, Integer res) { 

    ArrayList<Integer> nums = myMap.get(mod); 
    if (nums == null) { 
     nums = new ArrayList<Integer>(); 
    } 

    double sum = 0; 
    double test =0; 
    double avg =0; 

    for (Integer number : nums) { 
     sum += number; 
    } 
    //except sum is missing out the first entry in the ArrayList  
    System.out.println("The Sum of all the numbers in the array is " + sum); 

    nums.add(res); 
    myMap.put(mod, nums); 

    test = nums.size(); 

    //System.out.println("This is the size of the array list "+ 
    numbers.size()); 

    avg = sum/test; 

    System.out.println("this is the average: "+ average); 
} 
+6

'avg = test/sum;' - Sie haben es rückwärts. Es sollte 'avg = sum/test;' – Eran

+2

sollte es nicht 'nums.add (res);' statt 'numbers.add (res);' sein. Außerdem glaube ich nicht, dass Sie 'myMap.put (mod, nums);' benötigen, da Sie direkt an nums arbeiten und es bereits in myMap enthalten ist. – SaiBot

+0

Willkommen bei Stack Overflow! Fragen, die Debugging-Hilfe suchen ("Warum funktioniert dieser Code nicht?") Müssen das gewünschte Verhalten, ein spezifisches Problem oder einen Fehler und den kürzesten Code enthalten, der für die Reproduktion in der Frage erforderlich ist. Fragen ohne eine klare Problemstellung sind für andere Leser nicht nützlich. Siehe: Erstellen eines [mcve]. Nutze den Link [Bearbeiten], um deine * Frage * zu verbessern - füge keine weiteren Informationen über Kommentare hinzu. Vielen Dank! – GhostCat

Antwort

0

Ich habe versucht, den Code und meine Vermutung ist, zu verstehen, dass Sie so etwas wie dies wollen:

Sie wollen eine HashMap<String, ArrayList<Interger>>, die aus Listen von Zahlen (die ArrayList<Integer> speichert die HashMap), die mit ihrer id identifiziert werden kann (die String in der HashMap).

  1. eine neue Liste der HashMap hinzufügen

Nehmen wir an, dass wir eine Instanzvariable listMap in unserer Klasse haben.

public int createList(String listId) { 
    this.listMap.put(listId, new ArrayList<Integer>()); 
    return this.listMap.size(); 
} 

wird dies eine neue ArrayList<Integer> zum listMap hinzuzufügen.

  1. In Zahlen auf eine bestimmte Liste

Wir schreiben jetzt eine neue Methode Nummern

zu einer bestimmten Liste hinzuzufügen
public int addNumberToList(String listId, Integer number) { 
    this.listMap.get(listId).add(number); 
    return this.listMap.get(listId).size(); 
} 
    public double averageForList(String listId){ double sum = 0; double average = 0; for (Integer number : this.listMap.get(listId)) { sum += number; } if (this.listMap.get(listId).size() != 0) average = sum/this.listMap.get(listId).size(); return average; }

    Und das sollte es sein.

+0

das war nicht was ich suchte, aber könnte für das Programm in der Zukunft nützlich sein. Ich möchte nur herausfinden, warum meine ArrayList immer den ersten Eintrag als 0 setzt, egal was ich eintrage, was bedeutet, dass alle meine Durchschnittswerte falsch sind. Ich entschuldige mich dafür, dass ich in meiner ursprünglichen Frage nicht mehr klar war und danke Ihnen für Ihre Zeit. –