El problema es que cuando se pasa un número entero menor o igual a 0 como parámetro para 'fin', y cuando 'fin' es menor que 'inicio', no devuelve -1.
public static boolean isOdd (int number) { if (number < 0) { return false; } else { if (number % 2 != 0 ) { return true; } else { return false; } } }Este es un método para probar el parámetro 'inicio' y 'fin'
public static int sumOdd (int start, int end) { int sum = 0; for (int i = start; i<=end; i++) { if ((start<=0) || (end<=0) || (end<start)) { return -1; } else { if (isOdd(i)) { sum+=i; } } } return sum; }El problema radica en su bucle for .
Instruyó al bucle para que se ejecutara cuando i fuera más pequeño o igual al end . Eso suena bien en el papel, pero te das cuenta de que esta declaración
if ((start<=0) || (end<=0) || (end<start)) nunca se ejecutará (en el caso de que end sea mayor que start ), ya que i es start , y si end es mayor que start , por lo tanto es mayor que i , lo que no satisfaría la condición definida anteriormente en el ciclo for, i is smaller or equal to end . Por lo tanto, el ciclo for nunca se ejecutará.
Deberías estar haciendo:
public static int sumOdd(int start, int end) { int sum = 0; if ((start <= 0) || (end <= 0) || (end < start)) { return -1; } else { for (int i = start; i <= end; i++) { if (isOdd(i)) { sum += i; } } return sum; } }Prueba de funcionamiento
sumOdd(1, 0) devuelve -1
sumOdd(1, 3) devuelve 4