Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: apcs919 en 03 de Diciembre 2014, 02:44

Título: clase que representa una tabla Hash en Java ejemplo código
Publicado por: apcs919 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);
    }
}
Título: Re:clase que representa una tabla Hash en Java ejemplo código
Publicado por: Alex Rodríguez 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
Título: Re:clase que representa una tabla Hash en Java ejemplo código
Publicado por: apcs919 en 08 de Diciembre 2014, 20:03
gracias por el tip je es que soy nuevo aquí en el foro