Как рассчитать сумму всех чисел от 0 до n? - PullRequest
0 голосов
/ 26 марта 2019

Итак, я пытаюсь вычислить все числа от 0 до заданного числа (n) с помощью цикла, как видно из моего кода, но я просто не могу понять, как.

public static int sumOfNumbers(int... params) {

     int sum = 0;

     for (int i : params) {
         sum = i;
     };

     return sum;
}      

Ответы [ 8 ]

3 голосов
/ 26 марта 2019

Вы перезаписываете sum, не добавляя к нему. Вы должны использовать оператор += вместо оператора =:

sum += i;

Кроме того, вы можете рассматривать это как математическую проблему и использовать формулу для суммы арифметической прогрессии :

public static int sumZeroToN(int n) {
    return n * (n + 1) / 2;
}
2 голосов
/ 26 марта 2019

Это сумма чисел в серии, поэтому вы можете сделать это в O (1), используя:

int sum = n * (n + 1) / 2;

Где n - наибольшее число в params, paramsявляющийся массивом / набором чисел от 0 до n.

2 голосов
/ 26 марта 2019

Вы можете использовать sum из IntStream:

return Arrays.stream(params).sum();
1 голос
/ 26 марта 2019

Поскольку вы хотите от 0 до n, вы можете использовать IntStream, например,

IntStream.rangeClosed(0, n).sum()

1 голос
/ 26 марта 2019

Вы перезаписываете var sum в каждом цикле и забываете суммировать, вам нужно изменить свой код на что-то вроде этого:

public static int sumOfNumbers(int... params) {

    int sum = 0;

    for (int i : params) {
        sum += i; //Same as sum = sum + 1;
    };

    return sum;
}
0 голосов
/ 26 марта 2019

Используйте для цикла, а не для каждого цикла! Для каждого цикла используйте со списком.

int sum = 0;
for(int i=0; i<n; i++) {
   sum += i // same as sum = sum + i;
}
return sum;

Или просто используйте:

int sum = n * (n + 1) / 2;
0 голосов
/ 26 марта 2019

вы пытаетесь вычислить сумму арифметического ряда, поэтому вы можете просто сделать это без цикла:

sum = ((param + 1) * param) / 2;

param isданный номер.

0 голосов
/ 26 марта 2019
int sum = 0;
for (int i = 0; i <= n; i++) {
 sum = sum + i;
}
System.out.println(sum);
...