Escriba el suyo, el código para hacerlo es de 2-3 líneas de largo.
wkl
2
Desafortunadamente, las "respuestas" anteriores (y siguientes) son "The Java Way": - / Podría usar la biblioteca Functional Java , pero es muy engorroso lidiar con la sintaxis de Java.
1
Sé que esta pregunta es extremadamente antigua, pero la respuesta de msayag a continuación parece que debería marcarse como la respuesta aceptada.
Matsu Q.
El problema con la escritura propia es que es un bucle. Cuando tomas una suma de 3 números, deberías poder hacerlo en una sola instrucción.
Si está utilizando Java 8, la Arraysclase proporciona un stream(int[] array)método que devuelve una secuencia IntStreamcon la intmatriz especificada . También se ha sobrecargado para doubley longmatrices.
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
Finalmente, puede tomar una variedad de tipos T. Entonces, por ejemplo, puede tener un Stringque contiene números como entrada y si desea sumarlos simplemente haga lo siguiente:
int sum =Arrays.stream("1 2 3 4".split("\\s+")).mapToInt(Integer::parseInt).sum();
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);}}
Puede hacerlo aún más agradable con un ciclo for-each (introducido en Java 1.5).
wkl
6
En Java 8
Código :
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());
Salida :
The summation of array is 15Another way to find summation :15
Explicacion :
En Java 8, puede usar el concepto de reducción para hacer su adición.
En mi humilde opinión, una función de suma parece una buena opción para extender la clase Arrays donde viven, completan, ordenan, buscan, copian y equivalen. Hay muchos métodos útiles que se esconden en los javadocs, por lo que es una pregunta justa cuando se transfiere Fortran a Java para preguntar antes de lanzar nuestro propio método de ayuda. Busque en el enorme índice de javadoc "sum", "add" y cualquier otra palabra clave que se le ocurra. Probablemente sospeche que alguien ya ha hecho esto para tipos primitivos int, float, double, Integer, Float, Double No importa cuán simple, siempre es bueno verificarlo. Mantenga el código lo más simple posible y no reinvente la rueda.
Tienes que rodar el tuyo.
Empiezas con un total de 0. Luego, para cada número entero en la matriz, agrégalo a un total. Luego, cuando no tienes enteros, tienes la suma.
Debe iterar a través de los elementos de la matriz de alguna manera; puede hacerlo con un bucle for o un bucle while. Necesita almacenar el resultado de la suma en un acumulador. Para esto, necesita crear una variable.
int accumulator =0;for(int i =0; i < myArray.length; i++){
accumulator += myArray[i];}
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;}
Depende. ¿Cuántos números estás agregando? Probar muchas de las sugerencias anteriores:
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);}}
Descubrí que, usando una máquina Ubuntu18 de 8 núcleos y 16 G, el ciclo era más rápido para valores más pequeños y el paralelo para valores más grandes. Pero, por supuesto, dependería del hardware que esté ejecutando:
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;}
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 }}
Podemos usar la función definida por el usuario. Al principio, inicialice la variable suma igual a cero. Luego atraviese la matriz y agregue el elemento con suma. Luego actualice la variable suma.
Fragmento de código :
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);}}
Un poco sorprendido de ver Ninguna de las respuestas anteriores considera que puede ser varias veces más rápido usando un grupo de subprocesos. Aquí, parallelutiliza un grupo de subprocesos de unión de horquilla y divide automáticamente la secuencia en varias partes y las ejecuta en paralelo y luego se fusiona. Si solo recuerda la siguiente línea de código, puede usarla en muchos lugares.
Entonces, el premio al código corto y dulce más rápido es para -
int[] nums ={1,2,3};int sum =Arrays.stream(nums).parallel().reduce(0,(a,b)-> a+b);
Digamos que quieres hacer sum of squares, luego Arrays.stream (nums) .parallel (). Map (x-> x * x) .reduce (0, (a, b) -> a + b). La idea es que todavía puede realizar una reducción, sin mapa.
No necesariamente más rápido. Loop tendrá un rendimiento superior para la pequeña N. Vea mi publicación más larga con detalles.
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);}}
A partir de Java 8 El uso de expresiones lambda se ha vuelto disponible.
Mira esto:
int[] nums =/** Your Array **/;
Compacto:
int sum =0;Arrays.asList(nums).stream().forEach(each ->{
sum += each;});
Preferir:
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;});
Respuestas:
En java-8 puedes usar streams:
Salida:
La suma es 150.
Esta en el paquete
java.util.stream
fuente
java.util.stream.DoubleStream.of(a).sum();
Si está utilizando Java 8, la
Arrays
clase proporciona unstream(int[] array)
método que devuelve una secuenciaIntStream
con laint
matriz especificada . También se ha sobrecargado paradouble
ylong
matrices.También proporciona un método
stream(int[] array, int startInclusive, int endExclusive)
que le permite tomar un rango específico de la matriz (que puede ser útil):Finalmente, puede tomar una variedad de tipos
T
. Entonces, por ejemplo, puede tener unString
que contiene números como entrada y si desea sumarlos simplemente haga lo siguiente:fuente
Esta es una de esas cosas simples que no existe (AFAIK) en la API estándar de Java. Es bastante fácil escribir el tuyo.
Otras respuestas están perfectamente bien, pero aquí hay una con un poco de azúcar sintáctica para cada uno.
Además, incluso se muestra un ejemplo de suma de matrices en la Especificación del lenguaje Java 7 . El ejemplo es de la Sección 10.4 - Acceso a matrices .
fuente
No puedes Otros lenguajes tienen algunos métodos para esto, como array_sum () en PHP, pero Java no.
Sólo..
fuente
En Apache Math: hay
StatUtils.sum(double[] arr)
fuente
El único punto que agregaría a las soluciones anteriores es que usaría un largo para acumular el total para evitar cualquier desbordamiento de valor.
fuente
fuente
En
Java 8
Código :
Salida :
Explicacion :
En
Java 8
, puede usar el concepto de reducción para hacer su adición.Leer todo sobre Reducción
fuente
fuente
En mi humilde opinión, una función de suma parece una buena opción para extender la clase Arrays donde viven, completan, ordenan, buscan, copian y equivalen. Hay muchos métodos útiles que se esconden en los javadocs, por lo que es una pregunta justa cuando se transfiere Fortran a Java para preguntar antes de lanzar nuestro propio método de ayuda. Busque en el enorme índice de javadoc "sum", "add" y cualquier otra palabra clave que se le ocurra. Probablemente sospeche que alguien ya ha hecho esto para tipos primitivos int, float, double, Integer, Float, Double No importa cuán simple, siempre es bueno verificarlo. Mantenga el código lo más simple posible y no reinvente la rueda.
fuente
Me gusta este método personalmente. Mi estilo de código es un poco raro.
Bastante fácil de usar en código:
fuente
Yo uso esto:
fuente
Tienes que rodar el tuyo.
Empiezas con un total de 0. Luego, para cada número entero en la matriz, agrégalo a un total. Luego, cuando no tienes enteros, tienes la suma.
Si no hubiera enteros, entonces el total es 0.
fuente
Hay dos cosas que aprender de este ejercicio:
Debe iterar a través de los elementos de la matriz de alguna manera; puede hacerlo con un bucle for o un bucle while. Necesita almacenar el resultado de la suma en un acumulador. Para esto, necesita crear una variable.
fuente
Puede hacer que su código se vea mejor así:
fuente
Depende. ¿Cuántos números estás agregando? Probar muchas de las sugerencias anteriores:
Descubrí que, usando una máquina Ubuntu18 de 8 núcleos y 16 G, el ciclo era más rápido para valores más pequeños y el paralelo para valores más grandes. Pero, por supuesto, dependería del hardware que esté ejecutando:
fuente
Hay un método sum () en la biblioteca de subrayado-java .
Ejemplo de código:
fuente
Utilice la siguiente lógica:
fuente
No existe un 'método en una clase de matemáticas' para tal cosa. No es como si fuera una función de raíz cuadrada o algo así.
Solo necesita tener una variable para la suma y recorrer la matriz agregando cada valor que encuentre a la suma.
fuente
fuente
Podemos usar la función definida por el usuario. Al principio, inicialice la variable suma igual a cero. Luego atraviese la matriz y agregue el elemento con suma. Luego actualice la variable suma.
Fragmento de código :
fuente
fuente
Un poco sorprendido de ver Ninguna de las respuestas anteriores considera que puede ser varias veces más rápido usando un grupo de subprocesos. Aquí,
parallel
utiliza un grupo de subprocesos de unión de horquilla y divide automáticamente la secuencia en varias partes y las ejecuta en paralelo y luego se fusiona. Si solo recuerda la siguiente línea de código, puede usarla en muchos lugares.Digamos que quieres hacer
sum of squares
, luego Arrays.stream (nums) .parallel (). Map (x-> x * x) .reduce (0, (a, b) -> a + b). La idea es que todavía puede realizar una reducción, sin mapa.fuente
fuente
fuente
A partir de Java 8 El uso de expresiones lambda se ha vuelto disponible.
Mira esto:
Compacto:
Preferir:
Devolución o impresión de suma.
fuente