Ola a todos,
Estou desenvolvendo um programinha besta onde eu faço manualmente os métodos de uma hashtable e estou com dificuldade na lógica do método de remoção.
Nesse meu código abaixo, se inserirmos um valor qualquer e fizermos a busca ele retornará “TRUE” como deveria, mas ao chamar o método de remoção obtenho um “ArrayIndexOutofBounds”. Isso é visivelmente corrigido no método “removeLP” já que não faço a verificação da variável “aux” comparada ao tamanho do vetor.
Meu problema é, mesmo fazendo essa verificação, eu não consigo um output correto do método “busca” após remover algum valor.
Alguém poderia me ajudar?
Obrigado.
[code]public class HashTable {
private int [] vetor_inteiro;
private boolean [] vetor_booleano;
private int tamanho;
public HashTable(int tam) {
vetor_inteiro = new int[tam];
vetor_booleano = new boolean[tam];
tamanho = tam;
}
public int HashCode(int chave){
return (107 * chave)%tamanho;
}
public void insere(int chave){
int aux = HashCode(chave);
if(vetor_inteiro[aux]==0){
vetor_inteiro[aux]=chave;
}else
linearProbing(chave, aux+1);
}
public void linearProbing(int chave, int aux){
if(aux!=tamanho){
if(vetor_inteiro[aux]==0){
vetor_inteiro[aux]=chave;
vetor_booleano[aux]=false;
}else
linearProbing(chave, aux+1);
}else
System.out.print("Vetor cheio");
}
public boolean busca(int chave){
int aux = HashCode(chave);
if(vetor_inteiro[aux]==chave)
return true;
else
return buscaLP(chave, aux+1);
}
public boolean buscaLP(int chave, int aux){
if(aux!=tamanho){
if(vetor_inteiro[aux]==chave)
return true;
else
return buscaLP(chave, aux+1);
}else
return false;
}
public void remove(int chave){
int aux = HashCode(chave);
if(vetor_booleano[aux]==true){
vetor_inteiro[aux]=0;
}else
removeLP(chave, aux+1);
}
public void removeLP(int chave, int aux){
if(vetor_booleano[aux]==true){
vetor_inteiro[aux]=0;
}else
removeLP(chave, aux+1);
}
}[/code]
