Напишите свой, код для этого состоит из 2-3 строк.
wkl
2
К сожалению, приведенные выше (и следующие) «ответы» - это «Путь Java»: - / Вы можете использовать функциональную библиотеку Java , но иметь дело с синтаксисом Java так громоздко.
1
Я знаю, что этот вопрос очень старый, но ответ msayag ниже кажется, что он должен быть отмечен как принятый ответ.
Matsu Q.
Проблема с написанием собственного текста в том, что это цикл. Когда вы берете сумму из 3 чисел, вы должны уметь делать это за одну инструкцию.
Что делать, если массив содержит большие числа, а сумма выходит за рамки int?
thanhbinh84 01
5
В этом случае вы можете использовать LongStream либо как long sum = IntStream.of (a) .asLongStream (). Sum (); или длинная сумма = LongStream.of (a) .sum ();
msayag 06
2
Есть ли значительное преимущество в скорости при использовании потоков?
mvorisek 05
1
Если ваша сумма не умещается в длину, следует суммировать попарно (разделять и властвовать), потому что суммирование меньших BigDecimals быстрее.
Если вы используете Java 8, Arraysкласс предоставляет stream(int[] array)метод, который возвращает последовательность IntStreamс указанным intмассивом. Он также был перегружен doubleи longмассивы.
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
Наконец, он может принимать массив типа T. Таким образом, вы можете, например, иметь a, Stringкоторый содержит числа в качестве входных данных, и если вы хотите их суммировать, просто выполните:
int sum = Arrays.stream("1 2 3 4".split("\\s+")).mapToInt(Integer::parseInt).sum();
classGauss{
publicstaticvoidmain(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);
}
}
Единственное, что я хотел бы добавить к предыдущим решениям, это то, что я бы использовал long для накопления суммы, чтобы избежать переполнения значения.
int[] someArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, Integer.MAX_VALUE};
long sum = 0;
for (int i : someArray)
sum += i;
Вы можете сделать его еще лучше с помощью цикла for-each (введенного в Java 1.5).
wkl
6
В Java 8
Код :
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());
Выход :
The summation of array is 15
Another way to find summation :15
Пояснение :
В Java 8, вы можете использовать концепцию сокращения для добавления.
IMHO, функция суммы, казалось бы, хорошо подходит для расширения класса Arrays, где заполнение, сортировка, поиск, копирование и равенство в реальном времени. В документации javadoc скрывается множество удобных методов, так что при переносе Fortran на java будет справедливым вопросом задать вопрос перед развертыванием нашего собственного вспомогательного метода. Поищите в огромном индексе документации javadoc слова «сумма», «добавить» и любые другие ключевые слова, которые вы можете придумать. Вы можете предположить, что кто-то уже сделал это для примитивных типов int, float, double, Integer, Float, Double? Как бы просто ни было, проверить всегда хорошо. Сохраняйте код как можно проще и не изобретайте велосипед.
Вы должны сами катить.
Вы начинаете с нуля. Затем вы считаете, что каждое целое число в массиве добавляется к общей сумме. Затем, когда у вас заканчиваются целые числа, у вас есть сумма.
Если бы не было целых чисел, то общая сумма равна 0.
Вам нужно как-то перебирать элементы массива - вы можете сделать это с помощью цикла for или цикла while. Вам необходимо сохранить результат суммирования в аккумуляторе. Для этого вам нужно создать переменную.
int accumulator = 0;
for(int i = 0; i < myArray.length; i++) {
accumulator += myArray[i];
}
Вы можете сделать свой код лучше следующим образом:
publicvoidsomeMethod(){
List<Integer> numbers = new ArrayList<Integer>();
numbers.addAll(db.findNumbers());
...
System.out.println("Result is " + sumOfNumbers(numbers));
}
privateintsumOfNumbers(List<Integer> numbers){
int sum = 0;
for (Integer i : numbers){
sum += i;
}
return sum;
}
Это зависит. Сколько чисел вы добавляете? Тестирование многих из приведенных выше предложений:
import java.text.NumberFormat;
import java.util.Arrays;
import java.util.Locale;
publicclassMain{
publicstaticfinal NumberFormat FORMAT = NumberFormat.getInstance(Locale.US);
publicstaticlongsumParallel(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;
}
publicstaticlongsumStream(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;
}
publicstaticlongsumLoop(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;
}
publicstaticlongsumArray(int[] array){
finallong start = System.nanoTime();
int sum = Arrays.stream(array) .sum();
finallong end = System.nanoTime();
System.out.println(sum);
return end - start;
}
publicstaticlongsumStat(int[] array){
finallong start = System.nanoTime();
int sum = 0;
finallong end = System.nanoTime();
System.out.println(sum);
return end - start;
}
publicstaticvoidtest(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));
}
publicstaticvoidtestNumbers(int howmany){
int[] nums = newint[howmany];
for (int i =0; i < nums.length;i++) {
nums[i] = (i + 1)%100;
}
test(nums);
}
publicstaticvoidmain(String[] args){
testNumbers(3);
testNumbers(300);
testNumbers(3000);
testNumbers(30000);
testNumbers(300000);
testNumbers(3000000);
testNumbers(30000000);
testNumbers(300000000);
}
}
Я обнаружил, что при использовании 8-ядерной машины с Ubuntu18 на 16 Гб цикл был самым быстрым для меньших значений и параллельным для больших. Но, конечно, это будет зависеть от оборудования, которое вы используете:
staticintsum(){
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{
publicstaticvoidmain(){
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
}
}
Мы можем использовать определяемую пользователем функцию. Сначала инициализируйте переменную суммы равной нулю. Затем пройдитесь по массиву и добавьте элемент с суммой. Затем обновите переменную суммы.
Фрагмент кода:
import java.util.*;
import java.lang.*;
import java.io.*;
classSum{
public static int sum(int arr[])
{
int sum=0;
for(int i=0; i<arr.length; i++)
{
sum += arr[i];
}
return sum;
}
public staticvoid main (String[] args)
{
int arr[] = {1, 2, 3, 4, 5};
int total = sum(arr);
System.out.printf("%d", total);
}
}
Немного удивлен, увидев, что ни один из приведенных выше ответов не считает, что использование пула потоков может быть в несколько раз быстрее. Здесь parallelиспользуется пул потоков fork-join и автоматически разбивает поток на несколько частей и запускает их параллельно, а затем объединяет. Если вы просто помните следующую строку кода, вы можете использовать ее во многих местах.
Итак, награда за самый быстрый короткий и приятный код достается -
int[] nums = {1,2,3};
int sum = Arrays.stream(nums).parallel().reduce(0, (a,b)-> a+b);
Допустим, вы хотите сделать sum of squares, тогда Arrays.stream (nums) .parallel (). Map (x-> x * x) .reduce (0, (a, b) -> a + b). Идея в том, что вы все еще можете выполнить сокращение без карты.
Не обязательно самый быстрый. Loop будет лучше для малых N. См. Подробности в моем более длинном посте.
Gerardw
-1
publicclassNum1{
publicstaticvoidmain(){
//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 sum
System.out.println("The sum is :"+sum);
}
}
publicclassAddDemo{
publicstaticvoidmain(String[] args){
ArrayList <Integer>A = new ArrayList<Integer>();
Scanner S = new Scanner(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);
int Sum = 0;
for(int i=0; i<A.size(); i++){
Sum = Sum + A.get(i);
}
System.out.println("The Sum of Entered List is: "+Sum);
}
}
Начиная с Java 8 стало доступно использование лямбда-выражений.
Видеть это:
int[] nums = /** Your Array **/;
Компактный:
int sum = 0;
Arrays.asList(nums).stream().forEach(each -> {
sum += each;
});
Предпочитаю:
int sum = 0;
ArrayList<Integer> list = new ArrayList<Integer>();
for (int each : nums) { //refer back to original array
list.add(each); //there are faster operations…
}
list.stream().forEach(each -> {
sum += each;
});
Ответы:
В java-8 вы можете использовать потоки:
int[] a = {10,20,30,40,50}; int sum = IntStream.of(a).sum(); System.out.println("The sum is " + sum);
Выход:
Сумма 150.
Это в пакете
java.util.stream
import java.util.stream.*;
источник
java.util.stream.DoubleStream.of(a).sum();
Если вы используете Java 8,
Arrays
класс предоставляетstream(int[] array)
метод, который возвращает последовательностьIntStream
с указаннымint
массивом. Он также был перегруженdouble
иlong
массивы.int [] arr = {1,2,3,4}; int sum = Arrays.stream(arr).sum(); //prints 10
Он также предоставляет метод,
stream(int[] array, int startInclusive, int endExclusive)
который позволяет вам взять указанный диапазон массива (что может быть полезно):int sum = Arrays.stream(new int []{1,2,3,4}, 0, 2).sum(); //prints 3
Наконец, он может принимать массив типа
T
. Таким образом, вы можете, например, иметь a,String
который содержит числа в качестве входных данных, и если вы хотите их суммировать, просто выполните:int sum = Arrays.stream("1 2 3 4".split("\\s+")).mapToInt(Integer::parseInt).sum();
источник
Это одна из тех простых вещей, которых нет (AFAIK) в стандартном Java API. Достаточно легко написать свой собственный.
Другие ответы прекрасны, но вот один с синтаксическим сахаром для каждого.
int someArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; int sum = 0; for (int i : someArray) sum += i;
Кроме того, пример суммирования массивов даже показан в Спецификации языка Java 7 . Пример взят из Раздела 10.4 - Доступ к массиву .
class Gauss { public static void main(String[] args) { int[] ia = new int[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); } }
источник
Вы не можете. В других языках есть некоторые методы для этого, например array_sum () в PHP, но в Java их нет.
Только..
int[] numbers = {1,2,3,4}; int sum = 0; for( int i : numbers) { sum += i; } System.out.println(sum);
источник
В Apache Math: есть
StatUtils.sum(double[] arr)
источник
Единственное, что я хотел бы добавить к предыдущим решениям, это то, что я бы использовал long для накопления суммы, чтобы избежать переполнения значения.
int[] someArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, Integer.MAX_VALUE}; long sum = 0; for (int i : someArray) sum += i;
источник
int sum = 0; for (int i = 0; i < yourArray.length; i++) { sum = sum + yourArray[i]; }
источник
В
Java 8
Код :
int[] array = new int[]{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());
Выход :
The summation of array is 15 Another way to find summation :15
Пояснение :
В
Java 8
, вы можете использовать концепцию сокращения для добавления.Читать все о сокращении
источник
int sum = 0; for (int i = 0; i < myArray.length; i++) sum += myArray[i]; }
источник
IMHO, функция суммы, казалось бы, хорошо подходит для расширения класса Arrays, где заполнение, сортировка, поиск, копирование и равенство в реальном времени. В документации javadoc скрывается множество удобных методов, так что при переносе Fortran на java будет справедливым вопросом задать вопрос перед развертыванием нашего собственного вспомогательного метода. Поищите в огромном индексе документации javadoc слова «сумма», «добавить» и любые другие ключевые слова, которые вы можете придумать. Вы можете предположить, что кто-то уже сделал это для примитивных типов int, float, double, Integer, Float, Double? Как бы просто ни было, проверить всегда хорошо. Сохраняйте код как можно проще и не изобретайте велосипед.
источник
Мне лично нравится этот метод. Мой стиль кода немного странный.
public static int sumOf(int... integers) { int total = 0; for (int i = 0; i < integers.length; total += integers[i++]); return total; }
Довольно просто использовать в коде:
int[] numbers = { 1, 2, 3, 4, 5 }; sumOf(1); sumOf(1, 2, 3); sumOf(numbers);
источник
Я использую это:
public static long sum(int[] i_arr) { long sum; int i; for(sum= 0, i= i_arr.length - 1; 0 <= i; sum+= i_arr[i--]); return sum; }
источник
Вы должны сами катить.
Вы начинаете с нуля. Затем вы считаете, что каждое целое число в массиве добавляется к общей сумме. Затем, когда у вас заканчиваются целые числа, у вас есть сумма.
Если бы не было целых чисел, то общая сумма равна 0.
источник
Из этого упражнения можно извлечь два урока:
Вам нужно как-то перебирать элементы массива - вы можете сделать это с помощью цикла for или цикла while. Вам необходимо сохранить результат суммирования в аккумуляторе. Для этого вам нужно создать переменную.
int accumulator = 0; for(int i = 0; i < myArray.length; i++) { accumulator += myArray[i]; }
источник
Вы можете сделать свой код лучше следующим образом:
public void someMethod(){ List<Integer> numbers = new ArrayList<Integer>(); numbers.addAll(db.findNumbers()); ... System.out.println("Result is " + sumOfNumbers(numbers)); } private int sumOfNumbers(List<Integer> numbers){ int sum = 0; for (Integer i : numbers){ sum += i; } return sum; }
источник
Это зависит. Сколько чисел вы добавляете? Тестирование многих из приведенных выше предложений:
import java.text.NumberFormat; import java.util.Arrays; import java.util.Locale; public class Main { public static final NumberFormat FORMAT = NumberFormat.getInstance(Locale.US); public static long sumParallel(int[] array) { final long start = System.nanoTime(); int sum = Arrays.stream(array).parallel().reduce(0,(a,b)-> a + b); final long end = System.nanoTime(); System.out.println(sum); return end - start; } public static long sumStream(int[] array) { final long start = System.nanoTime(); int sum = Arrays.stream(array).reduce(0,(a,b)-> a + b); final long end = System.nanoTime(); System.out.println(sum); return end - start; } public static long sumLoop(int[] array) { final long start = System.nanoTime(); int sum = 0; for (int v: array) { sum += v; } final long end = System.nanoTime(); System.out.println(sum); return end - start; } public static long sumArray(int[] array) { final long start = System.nanoTime(); int sum = Arrays.stream(array) .sum(); final long end = System.nanoTime(); System.out.println(sum); return end - start; } public static long sumStat(int[] array) { final long start = System.nanoTime(); int sum = 0; final long end = System.nanoTime(); System.out.println(sum); return end - start; } public static void 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)); } public static void testNumbers(int howmany) { int[] nums = new int[howmany]; for (int i =0; i < nums.length;i++) { nums[i] = (i + 1)%100; } test(nums); } public static void main(String[] args) { testNumbers(3); testNumbers(300); testNumbers(3000); testNumbers(30000); testNumbers(300000); testNumbers(3000000); testNumbers(30000000); testNumbers(300000000); } }
Я обнаружил, что при использовании 8-ядерной машины с Ubuntu18 на 16 Гб цикл был самым быстрым для меньших значений и параллельным для больших. Но, конечно, это будет зависеть от оборудования, которое вы используете:
------ 3 numbers 6 parallel 4,575,234 6 stream 209,849 6 arrays 251,173 6 loop 576 ------ 300 numbers 14850 parallel 671,428 14850 stream 73,469 14850 arrays 71,207 14850 loop 4,958 ------ 3,000 numbers 148500 parallel 393,112 148500 stream 306,240 148500 arrays 335,795 148500 loop 47,804 ------ 30,000 numbers 1485000 parallel 794,223 1485000 stream 1,046,927 1485000 arrays 366,400 1485000 loop 459,456 ------ 300,000 numbers 14850000 parallel 4,715,590 14850000 stream 1,369,509 14850000 arrays 1,296,287 14850000 loop 1,327,592 ------ 3,000,000 numbers 148500000 parallel 3,996,803 148500000 stream 13,426,933 148500000 arrays 13,228,364 148500000 loop 1,137,424 ------ 30,000,000 numbers 1485000000 parallel 32,894,414 1485000000 stream 131,924,691 1485000000 arrays 131,689,921 1485000000 loop 9,607,527 ------ 300,000,000 numbers 1965098112 parallel 338,552,816 1965098112 stream 1,318,649,742 1965098112 arrays 1,308,043,340 1965098112 loop 98,986,436
источник
В библиотеке underscore-java есть метод sum () .
Пример кода:
import com.github.underscore.lodash.U; public class Main { public static void main(String[] args) { int sum = U.sum(java.util.Arrays.asList(1, 2, 3, 4)); System.out.println(sum); // -> 10 } }
источник
Используйте приведенную ниже логику:
static int sum() { int sum = 0; // initialize sum int i; // Iterate through all elements summing them up for (i = 0; i < arr.length; i++) sum += arr[i]; return sum; }
источник
Для этого не существует «метода в математическом классе». Это не похоже на функцию квадратного корня или что-то в этом роде.
Вам просто нужно иметь переменную для суммы и пройти через массив, добавляя каждое найденное вами значение к сумме.
источник
class Addition { public static void main() { int arr[]={5,10,15,20,25,30}; //Declaration and Initialization of an Array int sum=0; //To find the sum of array elements for(int i:arr) { sum += i; } System.out.println("The sum is :"+sum);//To display the sum } }
источник
Мы можем использовать определяемую пользователем функцию. Сначала инициализируйте переменную суммы равной нулю. Затем пройдитесь по массиву и добавьте элемент с суммой. Затем обновите переменную суммы.
Фрагмент кода:
import java.util.*; import java.lang.*; import java.io.*; class Sum { public static int sum(int arr[]) { int sum=0; for(int i=0; i<arr.length; i++) { sum += arr[i]; } return sum; } public static void main (String[] args) { int arr[] = {1, 2, 3, 4, 5}; int total = sum(arr); System.out.printf("%d", total); } }
источник
/** * Sum of all elements from 1 to 1000 */ final int sum = Stream.iterate(1, n -> n + 1).limit(1000).mapToInt(el -> el).sum();
источник
Немного удивлен, увидев, что ни один из приведенных выше ответов не считает, что использование пула потоков может быть в несколько раз быстрее. Здесь
parallel
используется пул потоков fork-join и автоматически разбивает поток на несколько частей и запускает их параллельно, а затем объединяет. Если вы просто помните следующую строку кода, вы можете использовать ее во многих местах.int[] nums = {1,2,3}; int sum = Arrays.stream(nums).parallel().reduce(0, (a,b)-> a+b);
Допустим, вы хотите сделать
sum of squares
, тогда Arrays.stream (nums) .parallel (). Map (x-> x * x) .reduce (0, (a, b) -> a + b). Идея в том, что вы все еще можете выполнить сокращение без карты.источник
public class Num1 { public static void main () { //Declaration and Initialization int a[]={10,20,30,40,50} //To find the sum of array elements int sum=0; for(int i=0;i<a.length;i++) { sum=sum+i; } //To display the sum System.out.println("The sum is :"+sum); } }
источник
public class AddDemo { public static void main(String[] args) { ArrayList <Integer>A = new ArrayList<Integer>(); Scanner S = new Scanner(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); int Sum = 0; for(int i=0; i<A.size(); i++){ Sum = Sum + A.get(i); } System.out.println("The Sum of Entered List is: "+Sum); } }
источник
Начиная с Java 8 стало доступно использование лямбда-выражений.
Видеть это:
int[] nums = /** Your Array **/;
Компактный:
int sum = 0; Arrays.asList(nums).stream().forEach(each -> { sum += each; });
Предпочитаю:
int sum = 0; ArrayList<Integer> list = new ArrayList<Integer>(); for (int each : nums) { //refer back to original array list.add(each); //there are faster operations… } list.stream().forEach(each -> { sum += each; });
Вернуть или распечатать сумму.
источник