Autor Tema: clase que representa una tabla Hash en Java ejemplo código  (Leído 20455 veces)

apcs919

  • Sin experiencia
  • *
  • Mensajes: 5
  • Love is life and life is living!!
    • Ver Perfil
clase que representa una tabla Hash en Java ejemplo código
« en: 03 de Diciembre 2014, 02:44 »
Hola buenas noches espero me puedan ayudar a compilar el siguiente código en java
es sobre búsqueda hash lo que pasa es que me pasaron el código pero tenia errores trate de corregirlos y ya no marca errores pero no muestra nada en pantalla (simplemente no hace nada) pero debería hacer algo ....bueno aquí les dejo el código espero me puedan ayudar

Código: [Seleccionar]
public class Hash {

    //Atributo
    Object [] th;

    //Constructor
    public Hash(int n){ th=new Object[n];
        for(int i=0; i<th.length;th[i]=null); //******************
    }
 

    //Métodos
    public void creaTabla(Object[]a, int nmax){  int pos;
        for(int i=0; i<a.length;i++){ //***********

            //Genera la posición del elemento a insertar
            //Haciendo uso de una función hash
            pos=a[i].hashCode()%nmax;
            System.out.println("Elemento :"+a[i]+ " pos = " + pos);

            //cuando la función devuelve un valor negativo

            if(pos<0){ pos*=-1; } if(th[pos]==null){

                //Inserta en la tabla sin colisión
                th[pos]=a[i];
            }else{

                while(th[pos]!=null){ pos++; if(pos==th.length){              pos=0;                  }
                }

                //Inserta el valor en la tabla hash despues de una colicion
             
                th[pos]=a[i];
            }
        }
        presenta("TABLA HASH",th);
    }

    public void buscarHash(Object elemb, int nmax){
        int e=elemb.hashCode();
        if(e<0){ e*=-1; }

        int pos=e%nmax;
        if(th[pos]==null){
           
            System.out.print("Elemento no encontrado"); }else{
            if(th[pos].equals(elemb)){

                System.out.print("Elemento encontrado, "+elemb+ " su posicion es : "+ pos); }else{ int j=pos+1; if(j==th.length){
                    j=0; }

                while((th[j]!=elemb)&&(th[j]!=null)&&(j!=pos)){
                    j++;
                    if(j>=th.length-1){ j=0;
                    }
                }

                if(th[j].equals(elemb)){
                    System.out.print("Elemento encontrado, "+elemb+ " su posicion es : "+ j); }else{

                    System.out.print("Elemento no encontrado");
                }
            }
        }
    }

    public void presenta(String msg,Object a[]){
        System.out.print(msg+" [");

        for(int i=0; i<=a.length-1;i++){ if(i<a.length-1){ //**********************
                System.out.print(a[i]+","); }else{
                System.out.print(a[i]+"]");
            }
        }

        System.out.print("\n");
    }

    public static void main(String args[]){
        Object l[]= {12,45,76,34,90,45,56,78};
        Hash bh=new Hash(l.length*2);
        bh.presenta("Elementos a insertar en la Tabla Hash",l);
        bh.creaTabla(l,l.length);
        bh.buscarHash(34,l.length);
    }
}
« Última modificación: 03 de Diciembre 2014, 08:22 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:clase que representa una tabla Hash en Java ejemplo código
« Respuesta #1 en: 03 de Diciembre 2014, 08:28 »
Hola, antes que nada ten en cuenta lo que se dice aquí a la hora de escribir y poner código en el foro: https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0

Si no lo haces así el código no se ve bien.

En el código que has presentado tienes un error que hace que la ejecución se quede bloqueada, en concreto la línea:

for(int i=0; i<th.length;th[ i ]=null);

Esto no es una construcción válida. Para que el programa se ejecute debes comentar esa línea, o escribirla como for(int i=0; i<th.length;i++){th[ i ]=null;}

Saludos

apcs919

  • Sin experiencia
  • *
  • Mensajes: 5
  • Love is life and life is living!!
    • Ver Perfil
Re:clase que representa una tabla Hash en Java ejemplo código
« Respuesta #2 en: 08 de Diciembre 2014, 20:03 »
gracias por el tip je es que soy nuevo aquí en el foro

 

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".