Wie kann ich durch eine Liste gehen und alle Werte addieren?

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

Woher ich das weiß:Studium / Ausbildung – Gelernter Fachinformatiker, Freiberufl. Softwareentwickler
gutefrage1898 
Fragesteller
 19.10.2020, 01:36

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.

0
FinnB132  19.10.2020, 01:43
@gutefrage1898
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

0
gutefrage1898 
Fragesteller
 19.10.2020, 01:54
@FinnB132

habe immer noch das Problem, dass BlueJ Collections.shuffle nicht erkennt und das ganze wird als Fehler markiert.

0

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());
	}
}
alfredo153  19.10.2020, 10:09

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.

0
gutefrage1898 
Fragesteller
 19.10.2020, 12:01

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?

0
daCypher  19.10.2020, 12:39
@gutefrage1898

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());
0

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

gutefrage1898 
Fragesteller
 19.10.2020, 00:47

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?

0
KleeSchulz  19.10.2020, 00:50

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

0