Bom Dia!
Primeiro Tópico já para pedir ajuda de vocês.
Preciso criar um programa que gere numeros aleatorios sem repetição, e utilize uma função de Hash, e salve em uma HashTable, que utiliza lista encadeada para colisão de dados.
Segue o que fiz até o momento:
import java.util.*;
import java.util.Set;
import java.util.HashSet;
import javax.swing.JOptionPane;
class HTDemo {
public static void main(String args[]) {
Hashtable numbers = new Hashtable();
List listA = new LinkedList();
List listB = new LinkedList();
int procura = 0;
int locationIndex = 0;
int tamVet = 0;
tamVet = Integer.parseInt(JOptionPane.showInputDialog(null, "Entre com o tamanho do vetor:"));
if (tamVet == 0) {
JOptionPane.showMessageDialog(null,"O tamanho não poder ser 0, Saindo do sistema.");
System.exit(0);
}
int UniversoKey = 0;
UniversoKey = Integer.parseInt(JOptionPane.showInputDialog(null, "Entre o universo de Chaves:"));
if (UniversoKey == 0) {
JOptionPane.showMessageDialog(null,"O tamanho não poder ser 0, Saindo do sistema.");
System.exit(0);
}
int vet[] = new int[tamVet];
// Set<Integer> valores = new HashSet<Integer>();
for(int i=0; i<vet.length; i++){
int retorno = (int) (UniversoKey * Math.random());
// valores.add(new Integer(retorno));
vet[i] = retorno;
}
// System.out.println("Valores gerados:");
// for(Integer i : valores) System.out.println(i);
System.out.print("Números Gerados : [");
for(int i=0; i<vet.length; i++){
//ESTE IF VERIFICA SE É O ÚLTIMO NÚMERO DO VETOR. SE FOR, NÃO COLOCA VIRGULA DEPOIS
if(i < vet.length-1){
System.out.print(vet[i]+",");
}else {
System.out.print(vet[i]);
}
}
System.out.print("]\n");
for(int i=0; i<vet.length; i++){
if ((vet[i] % tamVet)==0)
// numbers.put("0", vet[i]);
listA.add(vet[i]);
if ((vet[i] % tamVet)==1)
// numbers.put("1",vet[i]);
listB.add(vet[i]);
}
// System.out.println("Números na Posição 0 é: \n" + numbers.get("0"));
System.out.println("Números na Posição 0 é: \n" + listA);
// System.out.println("Números na Posição 1 é: \n" + numbers.get("1"));
System.out.println("Números na Posição 1 é: \n" + listB);
procura = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite o Valor que deseja procurar:"));
if ((procura % tamVet)==0)
locationIndex = listA.indexOf(procura);
if ((procura % tamVet)==1)
locationIndex = listB.indexOf(procura);
System.out.println("O numero esta na posição: " + locationIndex);
}
}
O código esta bem bagunçada, estou apanhando bastante, o programa esta gerando numeros aleatorios, mas com repetição.
Mas o que eu queria tentar resolver primeiro, seria a parte de jogar os valor nas listas, que vai da linha 51 à 57.
Segue exemplo de como eu teria que fazer:
Quantidade Numeros: 10
Universo de Numeros: 1 à 100
Numeros sorteados: 85,96,32,88,50,41,40,75,86,6
Ai faz MOD da quantidade de numeros, que neste caso é 10 e joga numa HashTable com lista encadeada:
Exemplo:
0 - 50,40
1 - 41
2 - 32
3 -
4 -
5 - 85,75
6 - 96,86,6
7 -
8 - 88
9 -
de 0 a 9 seriam as minhas listas.
Ele faz 50 mod 10, sobra 0, então joga na lista 0.
41 mod 10, sobra 1, então joga na lista 1.
Ai ele teria que jogar os respectivos numeros em cada lista.
No caso criei duas listas para o 0 e 1, mas eu não sei a quantidade de numeros que vou usar, pode ser 10, 20 ou 30.
Teria algum jeito de eu criar automaticamente isso?
Ou existe outra forma melhor de se fazer?