Ajuda com Tabela Hash

Ae blz?

To fazendo uma aplicação básica aqui que usa tabela hash(tenho pouca experiencna usando Hashtable). Ele cria um objeto da classe Cadastro com nome e nota e adicona na tabela Hash. Ai depois, por uma nota passada, é pesquisado e mostrado na tela os objetos da tabela q possuem nota igual ou superior à informada. A parte de adionar na tabela parece estar funcionando, pois usei o metodo size para testar, e retornou blz quantidade q tinha adiconado, porem qnd tento faze a parte de pesquisar pela nota o programa trava. Alguém tenha idea do que pode esta ocasionando o travamento.

[code] private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)
{
//Insere o cadastro de um aluno na tabela Hash de acordo com os dados passados no formulário e insere os dados no list1.
String nome = jTextField1.getText();
double nota = Double.valueOf(jTextField2.getText()).doubleValue();

    Cadastro aluno = new Cadastro (nome,nota);
    
    tab.put(aluno.getNota(),aluno);
    list1.add("Aluno:" + " " + aluno.getNome() + " - " + "Nota:" + " " +  aluno.getNota());
}   

====================================================

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt)
{
//Percorre a tabela hash a procura de alunos com nota igual ou superior à informada no formulário e lista-os no list2.

    double media = Double.valueOf(jTextField2.getText()).doubleValue(); 
    Enumeration e = tab.elements();
    Cadastro aluno = new Cadastro("",0);
    
    while (e.hasMoreElements());
    {
        aluno = ((Cadastro)e.nextElement());
        if (aluno.hashCode() >= media)
        {
            list2.add("Aluno:" + " " + aluno.getNome() + " - " + "Nota:" + " " +  aluno.getNota());
        }
    }  
}  [/code]

nesta linha existem vários problemas…

if (aluno.hashCode() >= media)

primero:
P método hashcode retorna um inteiro, e você está compadando com media que é um double…

segundo:
o método hashcode é da classe object, e se ele não foi sobreescrito na clase aluno ele vai retornar um identificador gerado pela classe object, que, aleém de inteiro, nunca vai ser iguals a média.

Acho que é só isso :cool:

A tabela hash organiza o objeto de acordo com o hashcode do ojeto, mas isso não significa que o hashcode do objeto vai ser a chave que você botou no seu hashtable, acho que é nisso que você está se confundindo. O hashcode só sever para tornar a procura mais rápida.

Para funcionar basta mudar o if para

if (aluno.getMedia() >= media)

Espero ter ajudado…

Já testei do jeito q vc falou, com o getNota() (o nome é esse) mas tb tava travando, ai depois q eu mudei para como ta ai para testar.

Valeu

Não consigo ver um lugar no seu programa que pode entrar em loop infinito, para travar o código… Tem certeza que ele não lança nenhuma exceção?

pelo menos na hora de compilar nao acusa nada.

Mas isso e normal… As exceções acontecem em tempo de execução… E algumas, chamadas RuntimeException não precisam nem mesmo sem declaradas… como por exemplo a NullPointerException… Se você está rodando um .jar roda ele pela linha de comando com o java -jar e ve se não vai aparecer nada

Eu to testando ele mandando rodar pelo proprio NetBeans, que é por onde to desenvolvendo.

Problema resolvido, uaehuae era um ponto e virgula q botei sem querer depois do While, so isso ueahuaheua, e compilo e tudo. Tudo por causa de um ponto e virgula hehee

Valeu ai.