2010-12-29 16 views
76

Mam problem ze znalezieniem sumy wszystkich liczb całkowitych w tablicy w Javie. Nie mogę znaleźć żadnej przydatnej metody w klasie Math.Jak znaleźć sumę wszystkich liczb w tablicy w Javie?

+11

napisać własny kod, aby to zrobić jest długa 2-3 linie. – birryree

+1

Niestety, powyższe (i następne) "odpowiedzi" to "The Java Way": -/Możesz użyć [Funkcjonalnej biblioteki Java] (http://www.functionaljava.org/), ale jest to tak kłopotliwe, aby poradzić sobie z składnia języka Java. –

+1

Wiem, że to pytanie jest bardzo stare, ale wydaje się, że odpowiedź [msayag] (http://stackoverflow.com/a/17846344/1946345) powinna być oznaczona jako zaakceptowana odpowiedź. –

Odpowiedz

2

Musisz przetaczać własne.
Zaczynasz od łącznej wartości 0. Następnie rozważ, dla każdej liczby całkowitej w tablicy, dodaj ją do sumy. Wtedy, gdy nie masz liczb całkowitych, masz sumę.

Gdyby nie było całkowite, a następnie suma wynosi 0.

1
define a sum variable = 0 

for each number in array: 
    sum = sum + number 
3
int sum = 0; 

for (int i = 0; i < yourArray.length; i++) 
{ 
    sum = sum + yourArray[i]; 
} 
+3

Możesz sprawić, że będzie jeszcze ładniejszy dzięki pętli for-each (wprowadzonej w Javie 1.5). – birryree

17

Nie możesz. Inne języki mają pewne metody takie jak array_sum() w PHP, ale Java tego nie robi.

Wystarczy ..

int[] numbers = {1,2,3,4}; 
int sum = 0; 
for(int i : numbers) { 
    sum += i; 
} 

System.out.println(sum); 
+5

Tęsknię za tobą. NET Suma (IEnumerable ) http://msdn.microsoft.com/en-us/library/system.linq.enumerable.sum.aspx –

0

Nie ma 'metoda w klasie matematycznej' dla czegoś takiego. To nie jest jak pierwiastek kwadratowy czy coś takiego.

Po prostu potrzebna jest zmienna dla sumy i pętli w tablicy, dodając każdą wartość do sumy.

2
int sum = 0; 
for (int i = 0; i < myArray.length; i++) 
    sum += myArray[i]; 
} 
2

Są dwie rzeczy, aby nauczyć się z tego ćwiczenia:

Trzeba iterację elementów tablicy jakoś - można to zrobić za pomocą pętli for lub pętli while. Musisz zapisać wynik sumowania w akumulatorze. W tym celu należy utworzyć zmienną.

29

Jest to jedna z tych prostych rzeczy, które nie występują (AFAIK) w standardowym interfejsie API języka Java. Łatwo jest napisać własną.

Inne odpowiedzi są zupełnie w porządku, ale tutaj jest jeden z jakimś cukrem syntaktycznym.

int someArray[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 
int sum = 0; 

for (int i : someArray) 
    sum += i; 

Również przykład podsumowania tablicy to nawet shown in the Java 7 Language Specification. Przykład jest z Sekcja 10.4 - Dostęp do tablicy.

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); 
    } 
} 
2

Można zrobić swój kod wyglądać lepiej tak:

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; 
} 
13

Jedynym punktem Dodałbym do poprzednich rozwiązań jest to, że chciałbym używać długo zgromadzić łącznie, aby uniknąć przepełnienia wartości .

int[] someArray = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, Integer.MAX_VALUE}; 
long sum = 0; 

for (int i : someArray) 
    sum += i; 
4

IMHO funkcja suma wydaje się dobre dopasowanie do rozszerzenia klasy Tablice gdzie napełnienia, sortowanie, wyszukiwanie, kopiowanie, & równa żywo. Istnieje wiele użytecznych metod ukrywania się w javadocs, więc jest to uczciwe pytanie podczas przenoszenia Fortran na java, aby zapytać przed uruchomieniem naszej własnej metody pomocniczej. Przeszukuj ogromny indeks javadoc dla "sumy", "dodaj" i każdego innego słowa kluczowego, które możesz wymyślić. Możesz podejrzewać, że na pewno ktoś już to zrobił dla prymitywnych typów int, float, double, Integer, Float, Double? Bez względu na to, jak proste, zawsze dobrze jest sprawdzić. Zachowaj kod tak proste, jak to możliwe, i nie wymyślaj ponownie koła.

1
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); 

    } 
    } 
+0

dude to suma = suma + a [i]; –

169

Po jest obecnie (marzec 2014 roku) będzie można używać strumieni:

int[] a = {10,20,30,40,50}; 
int sum = IntStream.of(a).sum(); 
System.out.println("The sum is " + sum); 

wyjściowa:

suma wynosi 150.

Jest w pakiecie java.util.stream

import java.util.stream.*; 
+0

Co jeśli tablica zawiera duże liczby, a suma jest poza zakresem? – thanhbinh84

+2

W takim przypadku możesz użyć LongStream, albo jako długą sumę = IntStream.of (a) .asLongStream(). Sum(); lub long sum = LongStream.of (a) .sum(); – msayag

+1

Czy korzystanie ze strumieni ma znaczną przewagę prędkości? – Mvorisek

3

Ta metoda osobiście mi się podoba. Mój styl kodowania jest trochę dziwny.

public static int sumOf(int... integers) { 
    int total = 0; 
    for (int i = 0; i < integers.length; total += integers[i++]); 
    return total; 
} 

Dość łatwy do wykorzystania w kodzie:

int[] numbers = { 1, 2, 3, 4, 5 }; 
sumOf(1); 
sumOf(1, 2, 3); 
sumOf(numbers); 
12

W Apache Math: Jest StatUtils.sum(double[] arr)

0
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 
    } 
} 
+0

Kopia istniejącej odpowiedzi. –

21

Jeśli używasz Java 8, klasa Arrays dostarcza sposobu stream(int[] array) która zwraca sekwencję IntStream z określoną tablicą int. Został również przeciążony dla macierzy double i long.

int [] arr = {1,2,3,4}; 
int sum = Arrays.stream(arr).sum(); //prints 10 

zapewnia również metodę stream(int[] array, int startInclusive, int endExclusive), która pozwala na wykonywanie określonego zakresu tablicy (co może być przydatne):

int sum = Arrays.stream(new int []{1,2,3,4}, 0, 2).sum(); //prints 3 

Wreszcie, może minąć tablicę typu T. Więc można na przykład mieć String który zawiera numery jako wejście, a jeśli chcesz je podsumować po prostu zrobić:

int sum = Arrays.stream("1 2 3 4".split("\\s+")).mapToInt(Integer::parseInt).sum(); 
-1
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); 

    } 

} 
1

Używam tego:

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

C-programista, co? – towi

3

W Java 8

Kod:

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()); 

Wyjście:

The summation of array is 15 
Another way to find summation :15 

Wyjaśnienie:

W Java 8, można użyć pojęcia redukcji wykonać dodawanie.

Read all about Reduction

0

Jako Java 8 Stosowanie wyrażeń lambda stały się dostępne.

Zobacz to:

int[] nums = /** Your Array **/; 

kompaktowa:

int sum = 0; 
Arrays.asList(nums).stream().forEach(each -> { 
    sum += each; 
}); 

Wolisz:

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; 
}); 

Return lub wydrukować sumę.

1

Istnieje metoda sum() w bibliotece underscore-lodash.

przykładem Kod:

import com.github.underscore.lodash.$; 

public class Main { 
    public static void main(String[] args) { 
     int sum = $.sum(java.util.Arrays.asList(1, 2, 3, 4)); 

     System.out.println(sum); 
     // -> 10 
    } 
} 
1

Możemy używać zdefiniowanych przez użytkownika funkcji. Najpierw zainicjuj zmienną sumy równą zero. Następnie przejdź przez tablicę i dodaj element z sumą. Następnie zaktualizuj zmienną sumy.

Code Snippet:

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); 
    } 
} 
Powiązane problemy