weiss wer, wie man am besten die Summe aller Werte einer ArrayList
berechnet?
Ja, einmal durch die List (Iterator, for-Schleife) und die einzelnen Werte aufaddieren.
ungefähr so:
iterator it = arraylist.iterator();
while(it.hasnext()){
Integer i += it.next();
}
nur das schema, keine gültigkeit der methodenaufrufe oder ähnliches, iterator ist aber eh in der doku gut nachzulesen mit schönen beispielen in vielen büchern ...
gl
Oder:
ArrayList<Integer> list = new ArrayList<Integer>();
// ...
Integer sum = 0;
for ( Integer i : list ) {
sum += i;
}
das is sicher ein programmierbeispiel für eine übung auf der uni oder so und die hast du ihm grad aufs beste gelöst, gratuliere
Wenns daran schon scheitert, dann gute Nacht.
(und ganz schön gemein von dir, dann sowas zu posten ;))
Original von schoe01
ungefähr so:iterator it = arraylist.iterator();
while(it.hasnext()){
Integer i += it.next();
}
nur das schema, keine gültigkeit der methodenaufrufe oder ähnliches, iterator ist aber eh in der doku gut nachzulesen mit schönen beispielen in vielen büchern ...
gl
Es wäre vermutlich besser, das 'i' vor der Schleife zu deklarieren.
Gibt es in Java nicht so was ähnliches wie das 'list'.Sum(i => i) in C#?
Original von schoe01
das is sicher ein programmierbeispiel für eine übung auf der uni oder so und die hast du ihm grad aufs beste gelöst, gratuliere![]()
mann oh mann, zuviel berichte über schavan gelesen in letzter zeit???
wenn sowas triviales heutzutage an einer uni als aufgabe gestellt würde,
sähe ich für die zukunft unseres landes (und meine rente) schwarz!!!
selbst wenn's so wäre, was ... .. ach lassen wir's,..
ps: ich hab mein
diplom schon laaaange in der tasche!
euch anderen: danke!! ich hatte gehofft, das geht irgendwie einfach als
mit einer schleife... scheint aber nicht so zu sein, ok, dann mach ich's so,
nochmals danke!!!
Was moslem sagt ist richtig. Genauer gesagt sollt das so sogar nen Compilefehler geben, weil += nicht auf nicht initialisierte Variablen gewirkt werden kann. Davon mal abgesehen würd ich ne int-Variable nehmen (Java packt den Integer dann automatisch aus).
Allgemeine Algorithmen für Collections wie in C++ gibts meines Wissens nicht. Sähe aber vermutlich sehr lustig aus, wenn man sich überlegt, wie man die Operationen dann übergeben müsste...
in Groovy(läuft auch auf der JavaVM) wäre das:
list.sum()
Ich nehme immer wenn möglich und sinnvoll(Stichwort Performance) Groovy, weil viele Dinge, die man häufig braucht in der Api verankert sind.
Original von schoe01
ungefähr so:
iterator it = arraylist.iterator();while(it.hasnext()){
Integer i += it.next();
}
so kann das nicht gehen, da i hier nur local im loop existiert. wenn du danach i abfragst gibts das schon nciht mehr. zudem musst du i initialisieren bevor du damit operieren kannst.
Original von csTFG
Integer sum = 0;
for ( Integer i : list ) {
sum += i;
}
das ist schon besser
besonders am anfang solltest du aber auf typ sicherheit achten
sum ist ein Integer und kein int. i ist auch ein Integer und kein int. du kannst streng genommen kein += auf nen Integer anwenden, + ist eine basis typ operation. denke der schluckt das so zwar, aber ganz ordentlich waere in der schleife drin sowas wie "sum = Integer.add(sum,i);". Diese add methode gibt es aber leider nicht in Integer, deswegen musst du es erst von Integer zu int runterholen, dann addieren, und dann wieder in den Integer reinpacken. Oder, da es sinnlose ist sum jedes mal umzuschreiben, gleich sum als int nehmen (oder long da ne summe von ints ueber den int bereich wachsen kann).
int s = 0;
for ( Integer i : list )
s += i.intValue();
(weiss nicht ob die for each nen nullpointer zulaesst, da musst du eventuell auch nochmal aufpassen, nen if(!list.isEmpty()) vorstellen oder sowas)
deswegen musst du es erst von Integer zu int runterholen, dann addieren, und dann wieder in den Integer reinpacken.
Und genau das macht += implizit.
Original von lnternet
Original von schoe01
blablabla(weiss nicht ob die for each nen nullpointer zulaesst, da musst du eventuell auch nochmal aufpassen, nen if(!list.isEmpty()) vorstellen oder sowas)
for each wirft eine npe
muss also vorher auf != null o.ä. überprüft werden