Итак, я пытаюсь вычислить все числа от 0 до заданного числа (n) с помощью цикла, как видно из моего кода, но я просто не могу понять, как.
public static int sumOfNumbers(int... params) { int sum = 0; for (int i : params) { sum = i; }; return sum; }
Вы перезаписываете sum, не добавляя к нему. Вы должны использовать оператор += вместо оператора =:
sum
+=
=
sum += i;
Кроме того, вы можете рассматривать это как математическую проблему и использовать формулу для суммы арифметической прогрессии :
public static int sumZeroToN(int n) { return n * (n + 1) / 2; }
Это сумма чисел в серии, поэтому вы можете сделать это в O (1), используя:
int sum = n * (n + 1) / 2;
Где n - наибольшее число в params, paramsявляющийся массивом / набором чисел от 0 до n.
n
params
0
Вы можете использовать sum из IntStream:
IntStream
return Arrays.stream(params).sum();
Поскольку вы хотите от 0 до n, вы можете использовать IntStream, например,
IntStream.rangeClosed(0, n).sum()
Вы перезаписываете var sum в каждом цикле и забываете суммировать, вам нужно изменить свой код на что-то вроде этого:
public static int sumOfNumbers(int... params) { int sum = 0; for (int i : params) { sum += i; //Same as sum = sum + 1; }; return sum; }
Используйте для цикла, а не для каждого цикла! Для каждого цикла используйте со списком.
int sum = 0; for(int i=0; i<n; i++) { sum += i // same as sum = sum + i; } return sum;
Или просто используйте:
вы пытаетесь вычислить сумму арифметического ряда, поэтому вы можете просто сделать это без цикла:
sum = ((param + 1) * param) / 2;
param isданный номер.
int sum = 0; for (int i = 0; i <= n; i++) { sum = sum + i; } System.out.println(sum);