Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Susana83 en 27 de Octubre 2014, 08:19

Título: error java.lang.ArrayIndexOutOfBoundsException en Java
Publicado 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

Código: [Seleccionar]
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];
    }
}
Título: Re:error java.lang.Array IndexOut OfBoundsException en Java
Publicado por: toni_apr en 28 de Octubre 2014, 22:42
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
Título: Re:error java.lang.ArrayIndexOutOfBoundsException en Java
Publicado por: Susana83 en 31 de Octubre 2014, 12:12
Gracias toni!! Yo tampoco se el objetivo exacto. Para evitar la llamada negativa he cambiado el código:

Código: [Seleccionar]
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;
        }
    }
}