Schreiben Sie Ihren eigenen, der Code dafür ist 2-3 Zeilen lang.
wkl
2
Leider sind die obigen (und folgenden) "Antworten" "The Java Way": - / Sie könnten die Functional Java-Bibliothek verwenden , aber es ist so umständlich, mit der Java-Syntax umzugehen.
1
Ich weiß, dass diese Frage extrem alt ist, aber die Antwort von msayag unten scheint als akzeptierte Antwort markiert zu sein.
Matsu Q.
Das Problem beim Schreiben ist, dass es sich um eine Schleife handelt. Wenn Sie eine Summe von 3 Zahlen nehmen, sollten Sie dies in einer Anweisung tun können.
Was ist, wenn das Array große Zahlen enthält und die Summe außerhalb des int-Bereichs liegt?
thanhbinh84
5
In diesem Fall können Sie LongStream verwenden, entweder als long sum = IntStream.of (a) .asLongStream (). Sum (); oder lange Summe = LongStream.of (a) .sum ();
Msayag
2
Gibt es einen erheblichen Geschwindigkeitsvorteil bei der Verwendung von Streams?
Mvorisek
1
Wenn Ihre Summe nicht lange passen würde, sollte man paarweise summieren (teilen und erobern), da das Summieren kleinerer BigDecimals schneller ist.
Wenn Sie Java 8 verwenden, stellt die ArraysKlasse eine stream(int[] array)Methode bereit , die eine Sequenz IntStreammit dem angegebenen intArray zurückgibt . Es wurde auch für doubleund longArrays überladen .
int[] arr ={1,2,3,4};int sum =Arrays.stream(arr).sum();//prints 10
int sum =Arrays.stream(newint[]{1,2,3,4},0,2).sum();//prints 3
Schließlich kann es ein Array vom Typ annehmen T. Sie können also per Beispiel eine haben, Stringdie Zahlen als Eingabe enthält, und wenn Sie sie summieren möchten, tun Sie einfach:
int sum =Arrays.stream("1 2 3 4".split("\\s+")).mapToInt(Integer::parseInt).sum();
Dies ist eines der einfachen Dinge, die in der Standard-Java-API nicht vorhanden sind (AFAIK). Es ist einfach genug, eigene zu schreiben.
Andere Antworten sind vollkommen in Ordnung, aber hier ist eine mit etwas für jeden syntaktischen Zucker.
int someArray[]={1,2,3,4,5,6,7,8,9,10};int sum =0;for(int i : someArray)
sum += i;
Ein Beispiel für die Array-Summierung finden Sie sogar in der Java 7-Sprachspezifikation . Das Beispiel stammt aus Abschnitt 10.4 - Array-Zugriff .
classGauss{publicstaticvoid main(String[] args){int[] ia =newint[101];for(int i =0; i < ia.length; i++) ia[i]= i;int sum =0;for(int e : ia) sum += e;System.out.println(sum);}}
Der einzige Punkt, den ich zu früheren Lösungen hinzufügen würde, ist, dass ich einen Long verwenden würde, um die Summe zu akkumulieren, um einen Wertüberlauf zu vermeiden.
int[] someArray ={1,2,3,4,5,6,7,8,9,10,Integer.MAX_VALUE};long sum =0;for(int i : someArray)
sum += i;
Sie können es mit einer for-each-Schleife (eingeführt in Java 1.5) noch schöner machen.
wkl
6
Im Java 8
Code :
int[] array =newint[]{1,2,3,4,5};int sum =IntStream.of(array).reduce(0,(a, b)-> a + b);System.out.println("The summation of array is "+ sum);System.out.println("Another way to find summation :"+IntStream.of(array).sum());
Ausgabe :
The summation of array is 15Another way to find summation :15
Erklärung :
In Java 8können Sie das Reduktionskonzept verwenden, um Ihre Addition durchzuführen.
IMHO scheint eine Summenfunktion gut geeignet zu sein, um die Arrays-Klasse zu erweitern, in der Füllen, Sortieren, Suchen, Kopieren und Gleiches live sind. Es gibt viele praktische Methoden, die sich in den Javadocs verstecken. Daher ist es eine faire Frage, wenn Sie Fortran nach Java portieren, bevor Sie unsere eigene Hilfsmethode verwenden. Durchsuchen Sie den riesigen Javadoc-Index nach "sum", "add" und jedem anderen Schlüsselwort, an das Sie denken könnten. Sie könnten vermuten, dass dies bereits jemand für primitive Typen int, float, double, Integer, Float, Double getan hat? Egal wie einfach, es ist immer gut zu überprüfen. Halten Sie den Code so einfach wie möglich und erfinden Sie das Rad nicht neu.
Du musst deine eigenen rollen.
Sie beginnen mit einer Summe von 0. Dann überlegen Sie, ob Sie für jede Ganzzahl im Array eine Summe hinzufügen möchten. Wenn Sie dann keine ganzen Zahlen mehr haben, haben Sie die Summe.
Sie müssen die Elemente des Arrays irgendwie durchlaufen - Sie können dies mit einer for-Schleife oder einer while-Schleife tun. Sie müssen das Ergebnis der Summierung in einem Akkumulator speichern. Dazu müssen Sie eine Variable erstellen.
int accumulator =0;for(int i =0; i < myArray.length; i++){
accumulator += myArray[i];}
Sie können Ihren Code folgendermaßen besser aussehen lassen:
publicvoid someMethod(){List<Integer> numbers =newArrayList<Integer>();
numbers.addAll(db.findNumbers());...System.out.println("Result is "+ sumOfNumbers(numbers));}privateint sumOfNumbers(List<Integer> numbers){int sum =0;for(Integer i : numbers){
sum += i;}return sum;}
staticint sum(){int sum =0;// initialize sumint i;// Iterate through all elements summing them upfor(i =0; i < arr.length; i++)
sum += arr[i];return sum;}
Es hängt davon ab, ob. Wie viele Zahlen fügen Sie hinzu? Testen vieler der oben genannten Vorschläge:
import java.text.NumberFormat;import java.util.Arrays;import java.util.Locale;publicclassMain{publicstaticfinalNumberFormat FORMAT =NumberFormat.getInstance(Locale.US);publicstaticlong sumParallel(int[] array){finallong start =System.nanoTime();int sum =Arrays.stream(array).parallel().reduce(0,(a,b)-> a + b);finallong end =System.nanoTime();System.out.println(sum);return end - start;}publicstaticlong sumStream(int[] array){finallong start =System.nanoTime();int sum =Arrays.stream(array).reduce(0,(a,b)-> a + b);finallong end =System.nanoTime();System.out.println(sum);return end - start;}publicstaticlong sumLoop(int[] array){finallong start =System.nanoTime();int sum =0;for(int v: array){
sum += v;}finallong end =System.nanoTime();System.out.println(sum);return end - start;}publicstaticlong sumArray(int[] array){finallong start =System.nanoTime();int sum =Arrays.stream(array).sum();finallong end =System.nanoTime();System.out.println(sum);return end - start;}publicstaticlong sumStat(int[] array){finallong start =System.nanoTime();int sum =0;finallong end =System.nanoTime();System.out.println(sum);return end - start;}publicstaticvoid test(int[] nums){System.out.println("------");System.out.println(FORMAT.format(nums.length)+" numbers");long p = sumParallel(nums);System.out.println("parallel "+ FORMAT.format(p));long s = sumStream(nums);System.out.println("stream "+ FORMAT.format(s));long ar = sumArray(nums);System.out.println("arrays "+ FORMAT.format(ar));long lp = sumLoop(nums);System.out.println("loop "+ FORMAT.format(lp));}publicstaticvoid testNumbers(int howmany){int[] nums =newint[howmany];for(int i =0; i < nums.length;i++){
nums[i]=(i +1)%100;}
test(nums);}publicstaticvoid main(String[] args){
testNumbers(3);
testNumbers(300);
testNumbers(3000);
testNumbers(30000);
testNumbers(300000);
testNumbers(3000000);
testNumbers(30000000);
testNumbers(300000000);}}
Ich fand heraus, dass mit einer 8-Kern-16-G-Ubuntu18-Maschine die Schleife für kleinere Werte am schnellsten und die Parallele für größere Werte am schnellsten war. Aber natürlich hängt es von der Hardware ab, die Sie ausführen:
classAddition{publicstaticvoid main(){int arr[]={5,10,15,20,25,30};//Declaration and Initialization of an Arrayint sum=0;//To find the sum of array elementsfor(int i:arr){
sum += i;}System.out.println("The sum is :"+sum);//To display the sum }}
Wir können benutzerdefinierte Funktionen verwenden. Initialisieren Sie zunächst die Summenvariable gleich Null. Durchlaufen Sie dann das Array und fügen Sie das Element mit der Summe hinzu. Aktualisieren Sie dann die Summenvariable.
Code-Auszug :
import java.util.*;import java.lang.*;import java.io.*;classSum{publicstaticint sum(int arr[]){int sum=0;for(int i=0; i<arr.length; i++){
sum += arr[i];}return sum;}publicstaticvoid main (String[] args){int arr[]={1,2,3,4,5};int total = sum(arr);System.out.printf("%d", total);}}
Ein bisschen überrascht zu sehen Keine der obigen Antworten geht davon aus, dass die Verwendung eines Thread-Pools um ein Vielfaches schneller sein kann. Hier parallelverwendet eine Gabel-Join - Thread - Pool und automatisch den Strom in mehrere Teile brechen und laufen sie parallel und dann verschmelzen. Wenn Sie sich nur an die folgende Codezeile erinnern, können Sie sie an vielen Stellen verwenden.
Die Auszeichnung für den schnellsten kurzen und süßen Code geht also an -
int[] nums ={1,2,3};int sum =Arrays.stream(nums).parallel().reduce(0,(a,b)-> a+b);
Nehmen wir an, Sie möchten dies tun sum of squares, dann Arrays.stream (nums) .parallel (). Map (x-> x * x) .reduce (0, (a, b) -> a + b). Die Idee ist, dass Sie ohne Karte immer noch eine Reduzierung durchführen können.
Nicht unbedingt am schnellsten. Loop wird für kleine N übertreffen. Siehe meinen längeren Beitrag mit Details.
Gerardw
-1
publicclassNum1{publicstaticvoid main (){//Declaration and Initializationint a[]={10,20,30,40,50}//To find the sum of array elementsint sum=0;for(int i=0;i<a.length;i++){
sum=sum+i;}//To display the sumSystem.out.println("The sum is :"+sum);}}
publicclassAddDemo{publicstaticvoid main(String[] args){ArrayList<Integer>A =newArrayList<Integer>();Scanner S =newScanner(System.in);System.out.println("Enter the Numbers: ");for(int i=0; i<5; i++){
A.add(S.nextInt());}System.out.println("You have entered: "+A);intSum=0;for(int i=0; i<A.size(); i++){Sum=Sum+ A.get(i);}System.out.println("The Sum of Entered List is: "+Sum);}}
Ab Java 8 Die Verwendung von Lambda-Ausdrücken ist verfügbar geworden.
Sieh dir das an:
int[] nums =/** Your Array **/;
Kompakt:
int sum =0;Arrays.asList(nums).stream().forEach(each ->{
sum += each;});
Bevorzugen:
int sum =0;ArrayList<Integer> list =newArrayList<Integer>();for(int each : nums){//refer back to original array
list.add(each);//there are faster operations…}
list.stream().forEach(each ->{
sum += each;});
Antworten:
Im Java-8 Sie können Streams verwenden:
Ausgabe:
Die Summe beträgt 150.
Es ist im Paket
java.util.stream
quelle
java.util.stream.DoubleStream.of(a).sum();
Wenn Sie Java 8 verwenden, stellt die
Arrays
Klasse einestream(int[] array)
Methode bereit , die eine SequenzIntStream
mit dem angegebenenint
Array zurückgibt . Es wurde auch fürdouble
undlong
Arrays überladen .Es bietet auch eine Methode, mit
stream(int[] array, int startInclusive, int endExclusive)
der Sie einen bestimmten Bereich des Arrays übernehmen können (was nützlich sein kann):Schließlich kann es ein Array vom Typ annehmen
T
. Sie können also per Beispiel eine haben,String
die Zahlen als Eingabe enthält, und wenn Sie sie summieren möchten, tun Sie einfach:quelle
Dies ist eines der einfachen Dinge, die in der Standard-Java-API nicht vorhanden sind (AFAIK). Es ist einfach genug, eigene zu schreiben.
Andere Antworten sind vollkommen in Ordnung, aber hier ist eine mit etwas für jeden syntaktischen Zucker.
Ein Beispiel für die Array-Summierung finden Sie sogar in der Java 7-Sprachspezifikation . Das Beispiel stammt aus Abschnitt 10.4 - Array-Zugriff .
quelle
Das kannst du nicht. Andere Sprachen haben einige Methoden dafür wie array_sum () in PHP, Java jedoch nicht.
Gerade..
quelle
In Apache Math: Es gibt
StatUtils.sum(double[] arr)
quelle
Der einzige Punkt, den ich zu früheren Lösungen hinzufügen würde, ist, dass ich einen Long verwenden würde, um die Summe zu akkumulieren, um einen Wertüberlauf zu vermeiden.
quelle
quelle
Im
Java 8
Code :
Ausgabe :
Erklärung :
In
Java 8
können Sie das Reduktionskonzept verwenden, um Ihre Addition durchzuführen.Lesen Sie alles über Reduktion
quelle
quelle
IMHO scheint eine Summenfunktion gut geeignet zu sein, um die Arrays-Klasse zu erweitern, in der Füllen, Sortieren, Suchen, Kopieren und Gleiches live sind. Es gibt viele praktische Methoden, die sich in den Javadocs verstecken. Daher ist es eine faire Frage, wenn Sie Fortran nach Java portieren, bevor Sie unsere eigene Hilfsmethode verwenden. Durchsuchen Sie den riesigen Javadoc-Index nach "sum", "add" und jedem anderen Schlüsselwort, an das Sie denken könnten. Sie könnten vermuten, dass dies bereits jemand für primitive Typen int, float, double, Integer, Float, Double getan hat? Egal wie einfach, es ist immer gut zu überprüfen. Halten Sie den Code so einfach wie möglich und erfinden Sie das Rad nicht neu.
quelle
Ich mag diese Methode persönlich. Mein Codestil ist etwas komisch.
Ziemlich einfach im Code zu verwenden:
quelle
Ich benutze das:
quelle
Du musst deine eigenen rollen.
Sie beginnen mit einer Summe von 0. Dann überlegen Sie, ob Sie für jede Ganzzahl im Array eine Summe hinzufügen möchten. Wenn Sie dann keine ganzen Zahlen mehr haben, haben Sie die Summe.
Wenn es keine ganzen Zahlen gab, ist die Summe 0.
quelle
Aus dieser Übung können Sie zwei Dinge lernen:
Sie müssen die Elemente des Arrays irgendwie durchlaufen - Sie können dies mit einer for-Schleife oder einer while-Schleife tun. Sie müssen das Ergebnis der Summierung in einem Akkumulator speichern. Dazu müssen Sie eine Variable erstellen.
quelle
Sie können Ihren Code folgendermaßen besser aussehen lassen:
quelle
In Unterstrich-Java gibt es eine sum () -Methode Bibliothek .
Codebeispiel:
quelle
Verwenden Sie die folgende Logik:
quelle
Es hängt davon ab, ob. Wie viele Zahlen fügen Sie hinzu? Testen vieler der oben genannten Vorschläge:
Ich fand heraus, dass mit einer 8-Kern-16-G-Ubuntu18-Maschine die Schleife für kleinere Werte am schnellsten und die Parallele für größere Werte am schnellsten war. Aber natürlich hängt es von der Hardware ab, die Sie ausführen:
quelle
Es gibt keine "Methode in einer Matheklasse" für so etwas. Es ist nicht so, als wäre es eine Quadratwurzelfunktion oder so etwas.
Sie müssen nur eine Variable für die Summe haben und das Array durchlaufen, um jeden gefundenen Wert zur Summe hinzuzufügen.
quelle
quelle
Wir können benutzerdefinierte Funktionen verwenden. Initialisieren Sie zunächst die Summenvariable gleich Null. Durchlaufen Sie dann das Array und fügen Sie das Element mit der Summe hinzu. Aktualisieren Sie dann die Summenvariable.
Code-Auszug :
quelle
quelle
Ein bisschen überrascht zu sehen Keine der obigen Antworten geht davon aus, dass die Verwendung eines Thread-Pools um ein Vielfaches schneller sein kann. Hier
parallel
verwendet eine Gabel-Join - Thread - Pool und automatisch den Strom in mehrere Teile brechen und laufen sie parallel und dann verschmelzen. Wenn Sie sich nur an die folgende Codezeile erinnern, können Sie sie an vielen Stellen verwenden.Nehmen wir an, Sie möchten dies tun
sum of squares
, dann Arrays.stream (nums) .parallel (). Map (x-> x * x) .reduce (0, (a, b) -> a + b). Die Idee ist, dass Sie ohne Karte immer noch eine Reduzierung durchführen können.quelle
quelle
quelle
Ab Java 8 Die Verwendung von Lambda-Ausdrücken ist verfügbar geworden.
Sieh dir das an:
Kompakt:
Bevorzugen:
Summe zurückgeben oder drucken.
quelle