Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Susana83 en 27 de Octubre 2014, 08:19
-
Hola a todos y gracias por toda la ayuda. En este ejercicio tengo un error java.lang.ArrayIndexOutOfBoundsException y se pide hacer un diseño del codigo para evitarlo, por favor ayuda
import java.util.Scanner;
import java.util.Arrays;
public class Test1 {
private static int SIZE = 16;
public static int[] hash = new int[SIZE];
private static final Scanner in=new Scanner(System.in);
public static void main(String[] args) {
System.out.println ("Valor 12. Obtenido: "+lookup(12));
System.out.println ("Valor -12. Obtenido: "+lookup(-12));
}
public static int lookup(int hashKey) {
return hash[hashKey % SIZE];
}
}
-
Hola Susana83
Tu error se produce cuando intentas acceder a un elemento del array que está fuera del rango declarado
Tu array 'hash' va de 0 a 15.
Y en esta llamada
lookup(-12)
quiere devolver lo siguiente
return hash[-12 % 16]
o lo que es lo mismo
return hash[-12]
El elemento -12 está fuera del rango entre 0 y 15
No se cual es el propósito del código.
Has de evitar las llamadas a elementos del array con índice negativo (no existen)
Saludos
-
Gracias toni!! Yo tampoco se el objetivo exacto. Para evitar la llamada negativa he cambiado el código:
import java.util.Scanner;
import java.util.Arrays;
public class Test1 {
private static int SIZE = 16;
public static int[] hash = new int[SIZE];
private static final Scanner in=new Scanner(System.in);
public static void main(String[] args) {
System.out.println ("Valor 12. Obtenido: "+lookup(12));
System.out.println ("Valor -12. Obtenido: "+lookup(-12));
}
public static int lookup(int hashKey) {
if ( hashKey % SIZE > 0 ){
return hash[hashKey % SIZE];}
else {
return -1;
}
}
}