Цикл for не выполняется;

Мой код не работает для этого метода, я пытаюсь сложить сумму суммы чисел; если n = 3, вернуть 10; n = 6, вернуть 56;

это мой код:

public int sumOfSums(int n) {
    int[] numArray = new int[n];
    int totalSum = 0;
    int counter = 0;
    for (int i = 0; i < n ; i++){
        numArray[i] = n;
        n--;
        System.out.println(numArray[i]);
    }
    for (int j = 0; j < n; j++){
        totalSum += numArray[j];
        System.out.println("I am in for loop");
  if (j == n-1){
            j = 0;
            counter++;
        }
        if (counter == n){
            return totalSum;
        }

}
return totalSum;
}

Также общая сумма не назначается, это ошибка, которую я получаю:

----jGRASP exec: java -ea HazMath
-37337 is not prime
1
Exception in thread "main" java.lang.AssertionError
    at HazMath.main(HazMath.java:133)

 ----jGRASP wedge: exit code for process is 1.
 ----jGRASP: operation complete.

от запуска этого утверждения:

public static void main(String[] args){
    HazMath HM=new HazMath();
        assert !HM.isPrime(3);
        assert !HM.isPrime(-37337);
        assert HM.sumOfSums(1) == 1;
    assert HM.sumOfSums(3) == 10;
    assert HM.sumOfSums(6) == 56;
    assert HM.sumOfSums(25) == 2925;
    assert HM.sumOfSums(-5) == 0;
    System.out.println("All tests passed.  VICTORY!");
    }

Согласно сообщению об ошибке, sumOfSums на самом деле не вызывается, потому что утверждение не выполняется одной строкой выше.

Thomas Hirsch 08.03.2019 01:32

Добро пожаловать в Stack Overflow. Сделайте правильный отступ в коде, чтобы мы могли его прочитать. Ваша IDE может сделать это за вас.

Ole V.V. 08.03.2019 03:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
56
2

Ответы 2

Вы утверждаете на Prime, который выдал AssertionError. Если вы намерены продолжить оставшиеся тесты, вам нужно будет поймать ошибку.

Пример кода:

        try {
            assertTrue(hm.isPrime(-37337));
        }
        catch (AssertionError e ) {
            e.printStackTrace();
        }

Кроме того, если вы беспокоитесь о том, что ваш код не войдет во второй цикл, то это происходит из-за следующего:

В первом цикле вы уменьшаете значение n до 0.

И затем вы сравниваете, если 0 меньше 0 во втором цикле.

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

f(n) = n(n+1)(n+2) / 6

Переписав код для использования этой функции, вы, скорее всего, устраните проблему в процессе.

Другие вопросы по теме