itsource

자바에서는 어레이 내의 모든 숫자의 합계를 어떻게 찾을 수 있습니까?

mycopycode 2022. 8. 17. 23:57
반응형

자바에서는 어레이 내의 모든 숫자의 합계를 어떻게 찾을 수 있습니까?

Java 배열에 있는 모든 정수의 합계를 찾는 데 문제가 있습니다. 에는 쓸 Math을 사용하다

에서는 스트림을 사용할 수 있습니다.

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 8을 사용하는 경우 클래스는 지정된 시퀀셜을 반환하는 메서드를 제공합니다.int 이이에 대해 되었습니다. 또한 다음 기간 동안 오버로드되었습니다.double ★★★★★★★★★★★★★★★★★」long★★★★★★★★★★★★★★★★★★.

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

또한 어레이의 지정된 범위(유효할 수 있음)를 선택할 수 있는 방법도 제공합니다.

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

할 수 .T '예시하다'라는 을 쓸 수 있습니다String하려면 , 다음의 를 실행합니다

int sum = Arrays.stream("1 2 3 4".split("\\s+")).mapToInt(Integer::parseInt).sum();

이것은 표준 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 - Array Access에 기재되어 있습니다.

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

그럴수는 없어요.다른 언어에는 PHP의 array_sum()과 같은 몇 가지 메서드가 있지만 Java에는 없습니다.

그냥...

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

System.out.println(sum);

Math : Math : 이 있습니다.StatUtils.sum(double[] arr)

이전 솔루션에 덧붙이고 싶은 유일한 포인트는 가치의 오버플로를 피하기 위해 긴 시간을 사용하여 합계를 축적한다는 것입니다.

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 합계 함수는 채우기, 정렬, 검색, 복사 및 등호가 존재하는 어레이 클래스를 확장하는 데 적합합니다.javadocs에는 편리한 메서드가 많이 숨어 있기 때문에 Fortran을 java로 포팅할 때 자체 도우미 메서드를 롤링하기 전에 물어보는 것은 적절한 질문입니다.거대한 javadoc 인덱스에서 "sum", "add" 및 기타 생각할 수 있는 키워드를 검색합니다.int, float, double, integer, float, double 등의 원시 유형에서 누군가가 이미 이 작업을 수행했다고 의심할 수 있습니다.아무리 간단한 것이라도 확인하는 것이 좋습니다.코드를 가능한 한 단순하게 유지하고 시간을 낭비하지 마십시오.

위의 답변 중 어느 것도 스레드 풀을 사용하면 몇 배나 고속화할 수 있다고 생각하지 않는 것을 보면 약간 놀라움을 느낄 수 있습니다. 서서,,parallel는 포크 스위칭스레드 풀을 사용하여 자동으로 여러 부분으로 스트림을 끊고 병렬로 실행한 후 병합합니다.다음 코드만 기억하면 여러 곳에서 사용할 수 있습니다.

그래서 가장 빠르고 달콤한 코드에 대한 상은...

int[] nums = {1,2,3};
int sum =  Arrays.stream(nums).parallel().reduce(0, (a,b)-> a+b);

를 들어, 여러분이 요.sum of squaresArrays.stream(nums)에서는 「., (aa+b」(0, (a, b)-> a+breduce를 할 수 .reduce는 reduce를 실행할 수 있습니다.

사정에 따라 다르겠지.숫자를 몇 개 더하는 거야?상기 제안의 많은 부분을 테스트하고 있습니다.

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코어 16G Ubuntu18 머신을 사용하여 작은 값에서는 루프가 가장 빠르고 큰 값에서는 병렬이 가장 빠르다는 것을 발견했습니다.물론 실행 중인 하드웨어에 따라 달라집니다.

------
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

저는 개인적으로 이 방법을 좋아합니다.제 코드 스타일은 좀 이상해요.

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

다음 논리를 사용합니다.

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

특별히 더블 타입의 배열을 가지고 있다면, 이 방법을 사용하여 요소의 합계를 계산할 수 있습니다.또한 수학수업을 이용하여

import org.apache.commons.math3.stat.StatUtils;
 
public class ArraySum {
 
   public static void main(String[] args) {
    double[] array = { 10, 4, 17, 33, -2, 14 };
    int sum = (int)StatUtils.sum(array);
    System.out.println("Sum of array elements is: " + sum);
   }
}

언더스코어 자바 라이브러리에는 sum() 메서드가 있습니다.

코드 예:

import com.github.underscore.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
    }
}

사용할 수 있습니다.

int sum = IntStream.of(a).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 
     }
} 

사용자 정의 함수를 사용할 수 있습니다.처음에 sum 변수를 초기화하면 0이 됩니다.그런 다음 배열을 이동하고 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();

이 답변의 대부분은 내장된 기능을 사용하고 있습니다.
이 질문의 이면에 있는 모든 논리를 알고 싶다면 다음과 같이 대답합니다.

import java.util.*;

public class SumOfArray {
    public static void main(String[] args){
        Scanner inp = new Scanner(System.in);
        int n = inp.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++){
            arr[i] = inp.nextInt();
        }
        System.out.println("The sum of the array is :" + sum(arr));
    }
    static int sum(int[] arr){
        int sum = 0;
        for (int a = 0; a < arr.length; a++){
            sum = sum + arr[a];
        }
        return sum;
    }
}
 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;
});

반환 또는 인쇄 합계.

언급URL : https://stackoverflow.com/questions/4550662/how-do-you-find-the-sum-of-all-the-numbers-in-an-array-in-java

반응형