Ajuda no código de hash - problema na hora de imprimir as variáveis

3 respostas
nois_159

Boa tarde, estou com um problema no meu código, ele faz a inserção normalmente, mais na hora de imprimir ele "morre"
não encontrei esse erro..
alguém pode me ajudar??

o codigo está aki do main.java e hash.java

public class Main {
    public static void main(String[] arges) {
        Hash<Integer> a = new Hash(11);

        String valor;

        do {
            valor = JOptionPane.showInputDialog(null, "entre com algo");
            if (!valor.equals("")) {
                a.inserir(Integer.parseInt(valor));
            }
        }
        while (!valor.equals(""));
        a.imprime();
    }
}

public class Hash<j> {
 //   public class hash<j> {

    Lista[] hash;

    public Hash(int tam) {
        hash = new Lista[tam];
        for (int i = 0; i < tam; i++) {
            hash[i] = new Lista();
        }
    }

    public int calchash(j x) {
        return (Integer) x % hash.length;
    }

    public void inserir(j valor) {
        int pos = calchash(valor);
        hash[pos].inserir(valor);
    }

    public No remover(j x) {
        int pos = calchash(x);
        return hash[pos].remove(x);

    }

    public No busca(j x) {
        int pos = calchash(x);
        return hash[pos].busca(x);

    }

    public void imprime() {
        for (int i = 0; i < hash.length; i++) {
            
            System.out.println("o Hash na posição: "+i+" é:");
            hash[i].imprime();
        }
    }
}

Muito obrigado pela atenção!!!

3 Respostas

E

Você pode rodar seu programa em uma linha de comando (em vez de dar um duplo clique - deixe de ser preguiçoso!) e então ver o “stack trace”. Então pode postar o stack trace aqui para a gente poder olhar. Que tal? Sem dizer em que linha ele morre, não tem como saber o que está errado.
Outra forma é ver, na sua IDE preferida, como é que você visualiza a saída do console (que é onde são registrados os “stack traces”).
Talvez sabendo isso você mesmo consiga corrigir seu problema, não?
Dica: poste também a classe Lista. Pode ser que o erro esteja nela, não?

nois_159

ahm... me desculpe pelas colocações que eu tive no meu projetinho..
no caso, pedi só uma ajuda pra saber se minha linha de código dessa parte está correta certo..
e sobre o "morreu" é que ele fica como dando um laço infinito, então pede para parar, ele não imprime.
Me desculpe pelo oque eu coloquei aqui..
mais vou passar a class Lista aqui pra o senhor se quiser me corrigir de boa, aqui está.

public class Lista <j> {
   // public class lista<j> {
    // saber o valor da raíz.

    private No cabeca;

    public No getCabeca() {
        return cabeca;
    }

    public void setCabeca(No cabeca) {
        this.cabeca = cabeca;
    }

    public Lista() {
        this.cabeca = null;
    }

    public void inserir(j valor) {
        No novo = new No(valor);
        novo.setProx(cabeca);
        cabeca = novo;
    }

    public No remove(j valor) {
        return remove(valor, cabeca);
    }

    private No remove(j valor, No n) {

        if (n == null) {
            return null;
        } else if (n.getValor() == valor) {
            No aux = n;
            n.setProx(n.getProx());
            n = null;
            return aux;
        } else {
            return remove(valor, n.getProx());
        }
    }

    public No busca(j valor) {
        return remove(valor, cabeca);
    }

    public No busca(j valor, No n) {

        if (n == null) {
            return null;

        } else if (n.getValor() == valor) {
            return n;
        } else {
            return busca(valor, n.getProx());
        }
    }

    public void imprime() {
        No aux = cabeca;
        while (aux != null) {
            System.out.print(aux);
            aux = aux.getProx();
        }
        System.out.println();


    }
}


public class No <j> {
//public class no <j> {

    private No prox;

    public No getProx() {
        return prox;
    }

    public void setProx(No prox) {
        this.prox = prox;
    }

    public j getValor() {
        return valor;
    }

    public void setValor(j valor) {
        this.valor = valor;
    }
    private j valor;

    //Construtor

    public No( j valor) {
        this.prox = null;
        this.valor = valor;
    }


    @Override
public String toString() {
	return  (String) " ("+getValor()+") ";
    }
}

já aproveitei e mandei o meu No.. oks

des de já agradeço e peço desculpas pela colocação.

E

Ah, pensei que o programa tinha parado com um stack trace.
(Por exemplo, aquela ex-amante do tal goleiro deve ter morrido mesmo, não ficou em laço infinito :evil: )
Não tinha imaginado que ele tinha “travado” (que é o termo que a gente normalmente usa).

Criado 8 de julho de 2010
Ultima resposta 8 de jul. de 2010
Respostas 3
Participantes 2