[ Foro de Java ]
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 ;)
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.
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)
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.
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)
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.)