[ Foro de Java ]

error con ejercicio de array 7.4.3

18-Mar-2016 10:04
kotito otiok
5 Respuestas

Haciendo el ejercicio, el IDE no me muestra ningun error, pero cuando lo ejecuto e intento finalizarlo me da error.
Este es mi codigo, que simplemente si le das un numero del 1 al 12 te dice el valor de una casilla, pero cuando me quiero ir fuera del while me da un error y no se ejecuta el system.out.print


  public static void main(String[] args) {
        
        Scanner teclado = new Scanner(System.in);
        int[] diasmes = {31,28,31,30,31,30,31,31,30,31,30,31};
        byte eleccionmes;

System.out.print("Elige mes: ");
        do
        {
            eleccionmes=teclado.nextByte(); 
            System.out.println("el mes tiene " + diasmes[eleccionmes-1] + " dias");
             
        }while((eleccionmes > 0) || (eleccionmes < 12));
        System.out.println("Done!");
   }
    
}


No entiendo el por qué del error. Toda ayuda será agradecida ;)


18-Mar-2016 10:20
Nacho Cabanes (+83)

Te falta un "if" antes del "println", porque si el dato que introduce el usuario no está entre 1 y 12 (inclusive), no deberás buscar ese dato en el array.


20-Mar-2016 09:50
kotito otiok

No entiendo ese if. De todas formas lo he intentado añadir como pude y no daba con la tecla. El error que me da es el siguiente:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
at pkg009.Main.main(Main.java:66)
C:\Users\Paco\AppData\Local\NetBeans\Cache\8.1\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 3 seconds)


20-Mar-2016 13:20
Nacho Cabanes (+83)

Sin ver el cambio que has hecho, no se puede saber si ese cambio es bueno o no.

Me refería a esto:


  public static void main(String[] args) {
        
        Scanner teclado = new Scanner(System.in);
        int[] diasmes = {31,28,31,30,31,30,31,31,30,31,30,31};
        byte eleccionmes;

        System.out.print("Elige mes: ");
        do
        {
            eleccionmes=teclado.nextByte(); 
            if((eleccionmes > 0) && (eleccionmes <= 12)
                System.out.println("el mes tiene " + diasmes[eleccionmes-1] + " dias");
             
        }while((eleccionmes > 0) && (eleccionmes <= 12));
        System.out.println("Done!");
   }
    
}


Como puedes ver, he corregido también tu "while": no incluías el valor 12, y repetías mientras fuera mayor que 0 "o" menor que 12 (en vez de "y"), de modo que siempre se repetía, porque todos los números que no son mayores que 0 sí son menores que 12.


20-Mar-2016 14:05
kotito otiok

Ah claro!! La confusion importante ha sido en el operando. Había asocido mal los operandos. En cuanto al error del menor o igual que 12 si lo tenía presente, quería solucionar antes el error.
Lo que no entiendo la necesidad de ese if.
Según lo tengo entendido, HACEMOS la sentencia dentro del do MIENTRAS se cumple el intervalo (0,12]. Mi lógica me dice, que si esta fuera del intervalo, saldría del bucle.
¿Es correcto?

PD: gracias por mostrarme el error, te lo agradezco mucho)


23-Mar-2016 00:05
Nacho Cabanes (+83)

Así es. Pero dentro del bucle intentas acceder a una posición del array, y antes de hacerlo debes asegurarte de que se trata de una posición aceptable.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)