자바에서는 어레이 내의 모든 숫자의 합계를 어떻게 찾을 수 있습니까?
Java 배열에 있는 모든 정수의 합계를 찾는 데 문제가 있습니다. 에는 쓸 Math
을 사용하다
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 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 squares
Arrays.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
'itsource' 카테고리의 다른 글
Vue2: 메모리 리크 (0) | 2022.08.17 |
---|---|
Vuex: Axios GET 요청에서 구성 요소 내부에 정의되지 않은 값이 반환됨 (0) | 2022.08.17 |
요소 UI의 입력 구성 요소와 $ref 사용 (0) | 2022.08.17 |
C에서 빅 엔디안을 리틀 엔디안으로 변환하다[제공된 펑크를 사용하지 않고] (0) | 2022.08.17 |
Gradle을 사용하여 실행 가능한 JAR 생성 (0) | 2022.08.17 |