Buenas!
Estou tentando gerar números aleatórios (de 1 à 6) dentro de um ArrayList, e no final imprimí-los, mas os números não podem ser repetidos. Se alguém puder dar uma força, agradeço.
Segue o código:
import java.util.ArrayList;
import java.util.Random;
public class Teste {
public static void main(String[] args) {
ArrayList<Integer> lista = new ArrayList<Integer>();
Random r = new Random();
boolean repetir = true;
int numero = r.nextInt(6) + 1;
do{
for(Integer l : lista){
if(numero != l){
numero = r.nextInt(6) + 1;
lista.add(numero);
repetir = false;
}
else{
repetir = true;
}
}
}while(repetir = true);
for(Integer l : lista){
System.out.println(l.toString());
}
}
}
Usa um Set. Set não aceita objetos repetidos.
Por que não usa um HashSet ao invés da lista?
Java possui diferentes subinterfaces de Collection justamente para vários tipos de problemas.
A interface List (java.util.List) e suas implementações, todas, aceitam valores repetidos. Ou você faz uma verificação com o método contains, o que demanda desempenho ou usa algum outro que não permita duplicidade.
O mais próximo da estrutura da List é o Set (java.util.Set) e suas implementações (java.util.HashSet e java.util.LinkedHashSet, por exemplo) cuja função é a de representar um conjunto. Em um conjunto não são aceitos elementos duplicados, logo, o Set não permite duplicidades.
Tem um errinho aqui.
}while(repetir = true);
Não seria isto aqui?
}while(repetir == true);
A propósito, é “bad style” comparar uma variável booleana com false ou true. O correto é usar algo como
}while(repetir);
Adicione em ordem os números de 1 até 6 na lista e depois use o método Collections.shuffle para embaralhar a lista.
exemplo abaixo:
import java.util.HashSet;
import java.util.Set;
public class Teste {
private Set<Integer> lista = new HashSet<Integer>();
public static void main(String[] args) {
Teste teste = new Teste();
teste.adicionaNumeroRandomico();
}
private void adicionaNumeroRandomico() {
while (lista.size() < 6) {
lista.add(geraNumeroAleatorio());
}
imprimir();
}
private void imprimir() {
for (Integer numeroRandomico : lista) {
System.out.println(numeroRandomico);
}
}
private int geraNumeroAleatorio() {
return (int) (Math.random() * 10);
}
}
agora não posso explicar ta dando a hora de sair do trampo
qualquer coisa poste sua duvida que quando chegar na facul eu respondo