es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Índice fuera de límites, Java

Tengo un problema con el error de índice fuera de rango en los arrays.
Quiero crear un método que tome el mes y el día como parámetros y devuelva el día del año. Si alguno de los parámetros es incorrecto, el método debe devolver 0.

Por ejemplo, si el método recibe 2 y 3, lo que significa el tercer día de febrero, debe devolver 34. Si recibe 12 y 31, debe devolver 365.
Pero estoy obteniendo este problema de índice fuera de rango y no puedo resolverlo. ¿Algún consejo?
Este es mi código.

public class CalendarMethods {

public static int dayInYear(int month, int day){

int[] daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

int yearCalculation = 0;
int monthCalculation = 0;


for (int j = 0; j < month-1; j++) {
    monthCalculation = monthCalculation + daysInMonth[j];

}

yearCalculation = monthCalculation + day;
if (month <= 0 ) {
    yearCalculation = 0;
}
if (month >= 13){
    yearCalculation = 0;
}
return yearCalculation;

}

}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución para el error de índice fuera de rango en los arreglos

    El error de índice fuera de rango ocurre cuando intentamos acceder a un elemento de un arreglo que no existe. En el código dado para calcular el día del año basado en el mes y el día dados, puede producirse un error de índice fuera de rango si el parámetro de mes es menor que 1 o mayor que 12.

    Para solucionar este error, necesitamos agregar una verificación para el parámetro de mes antes de acceder a los elementos del arreglo daysInMonth. Además, debemos verificar si el parámetro de día está dentro del rango del número de días en el mes dado.

    Aquí está el código actualizado con las verificaciones requeridas:

    public class CalendarMethods {
    
        public static int dayInYear(int month, int day){
    
            int[] daysInMonth = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
    
            int yearCalculation = 0;
            int monthCalculation = 0;
    
            if (month < 1 || month > 12) {
                return 0; // mes inválido, retorna 0
            }
    
            int daysInGivenMonth = daysInMonth[month - 1];
            if (day < 1 || day > daysInGivenMonth) {
                return 0; // día inválido, retorna 0
            }
    
            for (int j = 0; j < month-1; j++) {
                monthCalculation += daysInMonth[j];
            }
    
            yearCalculation = monthCalculation + day;
            return yearCalculation;
    
        }
    }
    

    Ahora, si pasamos un parámetro de mes o día inválido a este método, devolverá 0 en lugar de lanzar una excepción de índice fuera de rango.

Comments are closed.