Wie kann ich durch eine Liste gehen und alle Werte addieren?
Wie könnte ich durch diese Liste gehen und dann alle Elemente zusammenaddieren?
Das Ergebnis ist zwar anders viel einfacher zu berechnen, aber ich soll so auf das Ergebnis kommen.
Hätte jemand Ahnung, ob man mit:
list to first
while list has access
list to next
etc. arbeiten kann oder ob es einen anderen Ansatz gibt?
Ich habe hier diesen Ansatz:
import java.util.ArrayList;
import java.util.Random
public class zahlenbis50 {
public static void main(String[] args) {
int size = 50;
ArrayList<Integer> list = new ArrayList<Integer>(size);
for (int i = 1; i <= size; i++) {
list.add(i);
}
Random rand = new Random();
while (list.size() > 0) {
int index = rand.nextInt(list.size());
System.out.println("Selected: " + list.remove(index));
}
}
}
Danke im Voraus.
3 Antworten
int summe = 0;
while(list.size() > 0) {
int index = list.size() - 1;
summe += list.remove(index);
}
So in etwa, hattest es ja schon fast.
Edit: Wofür die Random Objekt Instanz und die Methodenaufrufe auf dieser sind, ist mir unklar.
LG
int size = 50;
Random rnd = new Random();
ArrayList<Integer> list = new ArrayList<Integer>(size);
for(int i = 1; i <= size; i++) {
list.add(i);
}
Collections.shuffle(list);
int summe = 0;
while(list.size() > 0) {
int index = list.size() - 1;
summe += list.remove(index);
}
System.out.println(summe);
Das gehört in die mainmethode, Ich übernehme aber keine Haftung, lieg schon im Bett am Handy.
Ob das funktioniert musst du in deiner IDE testen, aber die Idee sollte klar sein.
LG
habe immer noch das Problem, dass BlueJ Collections.shuffle nicht erkennt und das ganze wird als Fehler markiert.
Durch eine Liste (List<Integer>) gehen und alle Elemente zusammenzählen:
Entweder per Stream:
int summe = list.stream().mapToInt(Integer::intValue).sum();
oder per Schleife:
int summe = 0;
for (int number: list) {
summe += number;
}
Wenn ich die Aufgabenstellung richtig verstanden habe, macht dein Programm aber was ganz anderes, als es soll.
Bisher füllt dein Programm eine Liste mit den Zahlen 1 bis 50 und schmeißt dann in zufälliger Reihenfolge die Elemente wieder aus der Liste raus. Du könntest die rausgeschmissenen Elemente in der Reihenfolge wieder in eine zweite Liste einfügen, damit sie gemischt sind.
Oder du nimmst halt Collections.shuffle(list);
In einer anderen Antwort hast du geschrieben, dass bei dem Befehl eine Fehlermeldung ausgegeben wird. Kannst du uns sagen, was in der Fehlermeldung steht? Die Funktion gibt es seit Java 1.2. Sollte also eigentlich auch in BlueJ drin sein.
Alternativ kannst du auch einen Stream aus Zufallszahlen erzeugen und so lange Zahlen einfügen, bis du jede einmal hast (das ist für 50 Zahlen noch ok, wird aber ziemlich schnell unnötig rechenintensiv)
List<Integer> list = new Random().ints(1, 51).distinct().limit(50).boxed().collect(Collectors.toList());
Theoretisch müsste es aber auch einfach mit shuffle funktionieren:
package de.daCypher.exercises;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class RndList {
public static void main(String[] args) {
// Liste mit Zahlen von 1 bis 50 füllen
List<Integer> list = IntStream.rangeClosed(1, 50).boxed().collect(Collectors.toList());
// mischen
Collections.shuffle(list);
// zählen und ausgeben
System.out.println(list.stream().mapToInt(Integer::intValue).sum());
}
}
Danke dir auf jeden Fall für deine Hilfe, das Problem hierbei ist, dass die Aufgabestellung so lautet:
füge die zahlen von 1 bis 50 zufällig in eine liste ein und dann geh durch die liste durch und schreibe die Summer aller Zahlen. Aber wenn ich Collections.shuffle benutze, würde das nicht heißen, dass die Zahlen erst in die Liste eingefügt werden und dann in eine zufällige Rheinfolge gebracht werden?
Stimmt, wobei ich nicht weiß, ob das einfach in der Aufgabenstellung blöd formuliert ist und es nur drauf ankommt, dass die Zahlen am Ende gemischt in der Liste stehen, oder ob tatsächlich erwartet wird, dass die Zahlen schon gemischt sind, bevor sie in die Liste kommen.
Falls sie wirklich gemischt sein müssen, bevor sie in die Liste kommen, kannst du ja deinen Code so weiterbauen, dass du die Zahlen, die du in zufälliger Reihenfolge aus der Liste rausnimmst, in genau dieser zufälligen Reihenfolge wieder in eine andere Liste einfügst. Dadurch werden die Zahlen ja gleich gemischt in die neue Liste eingefügt.
Du kannst natürlich auch die Variante nehmen, die in meiner Antwort steht, aber dann müsstest du dem Lehrer wahrscheinlich erklären, wie du auf die Lösung gekommen bist. Damit werden die Zahlen aber auch durcheinander in die Liste geschrieben. (Also es wird ein int-Stream mit Zufallszahlen zwischen 1 und 50 geöffnet und davon werden die ersten 50 unterschiedlichen Zahlen gesammelt und in ein Array geschrieben)
List<Integer> list = new Random().ints(1, 51).distinct().limit(50).boxed().collect(Collectors.toList());
Nicht dass das falsch ist, aber ich würde einen totalen Anfänger, der schon an grundlegenden Themen wie dem Befüllen einer Liste, dem Iterieren durch und Dingen wie "import" scheitert, nicht gleich mit Streaming zutexten.
Du hast zwei mal i
In der for schleife i durch j ersetzen
Und list.size funktioniert nicht dort musst du i machen für 50 Einträge
Mit list.add fügst du erstmal zahlen hinzu... das ganze muss dann geaddet werden... mein tipp teste mal dein programm ob bis jetz das gewünschte kommt
meinst du jetzt die for schleife die ich noch machen muss um addieren zu können ?
und was meinst du mit 50 Einträge, kann das nur manuell gemacht werden oder wie also die Angabe?
die Aufgabe war die zahlen zwischen 1und 50 zufällig einfügen und dann die Summe aller Zahlen zu berechnen.
könntest du mir sagen wie und wo ich dein Ansatz in mein Programm reinpacken sollen, sodass das ganze funktionieren kann, Das würde mir ehrlich riesig helfen.