Autor Tema: error java.lang.ArrayIndexOutOfBoundsException en Java  (Leído 24700 veces)

Susana83

  • Sin experiencia
  • *
  • Mensajes: 49
    • Ver Perfil
error java.lang.ArrayIndexOutOfBoundsException en Java
« 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];
    }
}

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:error java.lang.Array IndexOut OfBoundsException en Java
« Respuesta #1 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
« Última modificación: 28 de Octubre 2014, 23:08 por Alex Rodríguez »

Susana83

  • Sin experiencia
  • *
  • Mensajes: 49
    • Ver Perfil
Re:error java.lang.ArrayIndexOutOfBoundsException en Java
« Respuesta #2 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;
        }
    }
}

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".