Napisz swój własny kod, który to zrobi ma 2-3 linie.
wkl
2
Niestety powyższe (i następne) „odpowiedzi” to „sposób Java”: - / Możesz użyć funkcjonalnej biblioteki Java , ale radzenie sobie ze składnią Java jest tak kłopotliwe.
1
Wiem, że to pytanie jest bardzo stare, ale odpowiedź przez poniższy msayag wydaje się być oznaczona jako zaakceptowana.
Matsu Q.
Problem z pisaniem własnego jest taki, że jest to pętla. Kiedy weźmiesz sumę 3 liczb, powinieneś być w stanie zrobić to w jednej instrukcji.
Jeśli używasz języka Java 8, Arraysklasa udostępnia stream(int[] array)metodę, która zwraca sekwencję IntStreamz określoną inttablicą. Został również przeciążony dla tablic doublei 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
Wreszcie może przyjąć tablicę typu T. Możesz więc na przykład mieć, Stringktóry zawiera liczby jako dane wejściowe i jeśli chcesz je zsumować, po prostu wykonaj:
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);}}
Możesz uczynić to jeszcze przyjemniejszym dzięki pętli for-each (wprowadzonej w Javie 1.5).
wkl
6
W Java 8
Kod :
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());
Wyjście :
The summation of array is 15Another way to find summation :15
Wyjaśnienie :
W programie Java 8możesz dodać koncepcję redukcji.
IMHO funkcja sumy wydaje się być dobrym rozwiązaniem, aby rozszerzyć klasę Arrays, w której wypełnianie, sortowanie, wyszukiwanie, kopiowanie i równa się na żywo. Istnieje wiele przydatnych metod ukrytych w javadocach, więc podczas przenoszenia Fortrana do javy warto zadać pytanie przed uruchomieniem naszej własnej metody pomocniczej. Przeszukaj ogromny indeks javadoc, szukając słów „sum”, „add” i wszelkich innych słów kluczowych, które przyjdą Ci do głowy. Możesz podejrzewać, że ktoś już to zrobił dla typów pierwotnych int, float, double, Integer, Float, Double? Bez względu na to, jak proste, zawsze dobrze jest to sprawdzić. Utrzymuj kod tak prosty, jak to tylko możliwe i nie wymyślaj na nowo koła.
Musisz sam skręcić.
Zaczynasz od sumy równej 0. Następnie rozważ dla każdej liczby całkowitej w tablicy, dodaj ją do sumy. Kiedy nie masz liczb całkowitych, masz sumę.
Musisz jakoś przejrzeć elementy tablicy - możesz to zrobić za pomocą pętli for lub pętli while. Musisz zapisać wynik sumowania w akumulatorze. W tym celu musisz utworzyć zmienną.
int accumulator =0;for(int i =0; i < myArray.length; i++){
accumulator += myArray[i];}
Możesz poprawić wygląd swojego kodu w następujący sposób:
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;}
To zależy. Ile liczb dodajesz? Testowanie wielu z powyższych sugestii:
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);}}
Zauważyłem, że używając 8-rdzeniowego, 16G Ubuntu18 maszyny, pętla była najszybsza dla mniejszych wartości, a równoległa dla większych. Ale oczywiście zależy to od używanego sprzętu:
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 }}
Możemy korzystać z funkcji zdefiniowanych przez użytkownika. Przy pierwszej inicjalizacji zmiennej sumarycznej równej zero. Następnie przejdź przez tablicę i dodaj element z sumą. Następnie zaktualizuj zmienną sumy.
Fragment kodu:
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);}}
Nieco zaskoczony, że żadna z powyższych odpowiedzi nie uważa, że może być wielokrotnie szybszy przy użyciu puli wątków. W tym przypadku parallelużywa puli wątków łączenia rozwidlonego i automatycznie przerywa strumień na wiele części i uruchamia je równolegle, a następnie łączy. Jeśli tylko pamiętasz następujący wiersz kodu, możesz go używać w wielu miejscach.
Nagroda za najszybszy, krótki i przyjemny kod otrzymuje więc -
int[] nums ={1,2,3};int sum =Arrays.stream(nums).parallel().reduce(0,(a,b)-> a+b);
Powiedzmy, że chcesz to zrobić sum of squares, a następnie Arrays.stream (nums) .parallel (). Map (x-> x * x) .reduce (0, (a, b) -> a + b). Pomysł jest taki, że nadal możesz wykonywać redukcję, bez mapy.
Niekoniecznie najszybsze. Pętla będzie lepsza od małego N. Zobacz mój dłuższy post ze szczegółami.
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);}}
Od wersji Java 8 Użycie wyrażeń lambda stało się dostępne.
Zobacz:
int[] nums =/** Your Array **/;
Kompaktowy:
int sum =0;Arrays.asList(nums).stream().forEach(each ->{
sum += each;});
Woleć:
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;});
Odpowiedzi:
W java-8 możesz używać strumieni:
Wynik:
Suma wynosi 150.
Jest w opakowaniu
java.util.stream
źródło
java.util.stream.DoubleStream.of(a).sum();
Jeśli używasz języka Java 8,
Arrays
klasa udostępniastream(int[] array)
metodę, która zwraca sekwencjęIntStream
z określonąint
tablicą. Został również przeciążony dla tablicdouble
ilong
.Udostępnia również metodę,
stream(int[] array, int startInclusive, int endExclusive)
która pozwala na pobranie określonego zakresu tablicy (co może być przydatne):Wreszcie może przyjąć tablicę typu
T
. Możesz więc na przykład mieć,String
który zawiera liczby jako dane wejściowe i jeśli chcesz je zsumować, po prostu wykonaj:źródło
Jest to jedna z tych prostych rzeczy, których (AFAIK) nie ma w standardowym interfejsie API języka Java. Łatwo jest napisać własny.
Inne odpowiedzi są w porządku, ale tutaj jest jedna z kilkoma cukrami syntaktycznymi dla każdego.
Ponadto przykład sumowania tablic jest nawet pokazany w specyfikacji języka Java 7 . Przykład pochodzi z rozdziału 10.4 - Dostęp do tablicy .
źródło
Nie możesz. Inne języki mają do tego metody, takie jak array_sum () w PHP, ale Java nie.
Właśnie..
źródło
W Apache Math: jest
StatUtils.sum(double[] arr)
źródło
Jedyną kwestią, którą dodałbym do poprzednich rozwiązań, jest to, że użyłbym długiej, aby zgromadzić sumę, aby uniknąć przepełnienia wartości.
źródło
źródło
W
Java 8
Kod :
Wyjście :
Wyjaśnienie :
W programie
Java 8
możesz dodać koncepcję redukcji.Przeczytaj wszystko o redukcji
źródło
źródło
IMHO funkcja sumy wydaje się być dobrym rozwiązaniem, aby rozszerzyć klasę Arrays, w której wypełnianie, sortowanie, wyszukiwanie, kopiowanie i równa się na żywo. Istnieje wiele przydatnych metod ukrytych w javadocach, więc podczas przenoszenia Fortrana do javy warto zadać pytanie przed uruchomieniem naszej własnej metody pomocniczej. Przeszukaj ogromny indeks javadoc, szukając słów „sum”, „add” i wszelkich innych słów kluczowych, które przyjdą Ci do głowy. Możesz podejrzewać, że ktoś już to zrobił dla typów pierwotnych int, float, double, Integer, Float, Double? Bez względu na to, jak proste, zawsze dobrze jest to sprawdzić. Utrzymuj kod tak prosty, jak to tylko możliwe i nie wymyślaj na nowo koła.
źródło
Osobiście podoba mi się ta metoda. Mój styl kodu jest trochę dziwny.
Całkiem łatwy w użyciu w kodzie:
źródło
Używam tego:
źródło
Musisz sam skręcić.
Zaczynasz od sumy równej 0. Następnie rozważ dla każdej liczby całkowitej w tablicy, dodaj ją do sumy. Kiedy nie masz liczb całkowitych, masz sumę.
Gdyby nie było liczb całkowitych, suma wynosi 0.
źródło
Z tego ćwiczenia można się nauczyć dwóch rzeczy:
Musisz jakoś przejrzeć elementy tablicy - możesz to zrobić za pomocą pętli for lub pętli while. Musisz zapisać wynik sumowania w akumulatorze. W tym celu musisz utworzyć zmienną.
źródło
Możesz poprawić wygląd swojego kodu w następujący sposób:
źródło
To zależy. Ile liczb dodajesz? Testowanie wielu z powyższych sugestii:
Zauważyłem, że używając 8-rdzeniowego, 16G Ubuntu18 maszyny, pętla była najszybsza dla mniejszych wartości, a równoległa dla większych. Ale oczywiście zależy to od używanego sprzętu:
źródło
W bibliotece podkreślenia-java znajduje się metoda sum () .
Przykład kodu:
źródło
Użyj poniższej logiki:
źródło
Nie ma na to „metody na lekcjach matematyki”. To nie jest funkcja pierwiastka kwadratowego lub coś w tym rodzaju.
Wystarczy mieć zmienną dla sumy i przejrzeć tablicę, dodając każdą znalezioną wartość do sumy.
źródło
źródło
Możemy korzystać z funkcji zdefiniowanych przez użytkownika. Przy pierwszej inicjalizacji zmiennej sumarycznej równej zero. Następnie przejdź przez tablicę i dodaj element z sumą. Następnie zaktualizuj zmienną sumy.
Fragment kodu:
źródło
źródło
Nieco zaskoczony, że żadna z powyższych odpowiedzi nie uważa, że może być wielokrotnie szybszy przy użyciu puli wątków. W tym przypadku
parallel
używa puli wątków łączenia rozwidlonego i automatycznie przerywa strumień na wiele części i uruchamia je równolegle, a następnie łączy. Jeśli tylko pamiętasz następujący wiersz kodu, możesz go używać w wielu miejscach.Powiedzmy, że chcesz to zrobić
sum of squares
, a następnie Arrays.stream (nums) .parallel (). Map (x-> x * x) .reduce (0, (a, b) -> a + b). Pomysł jest taki, że nadal możesz wykonywać redukcję, bez mapy.źródło
źródło
źródło
Od wersji Java 8 Użycie wyrażeń lambda stało się dostępne.
Zobacz:
Kompaktowy:
Woleć:
Zwróć lub wydrukuj sumę.
źródło