Ola gente estou fazendo um trabalho, é um jogo de lógica, e o objetivo inicial dele é preencher um Array
de 4 posições do tipo Cor com valores randômicos [color=red]“SEM REPETIR”[/color] o que no caso
é o meu problema!!!
Eu tenho uma classe Cor, nesta classe cor eu tenho o método VerificaCor que recebe um número de 1 a 8
e retorna uma String com o nome da cor. Em uma outra classe principal que eu vou usar para testar o jogo
eu preciso dentro de um [color=red]FOR[/color] instanciar um arrey de 4 posições do tipo cor e cada objeto
cor precisa receber uma cor aleatória sem repetir, assim criando o array de objetos com as 4 cores diferentes.
- Classe Cor
[code]public class Cor {
//Atributos
private String nome;
//Construtor
public Cor(String nome){
this.nome = nome;
}
//Métodos
public String getNome(){
return this.nome;
}
public void setNome(String nomeCor){
this.nome = nomeCor;
}
public String verificaCor(int numeroCor){
if (numeroCor == 1) {
return "Verde";
} else if (numeroCor == 2) {
return "Azul";
} else if (numeroCor == 3) {
return "Marrom";
} else if (numeroCor == 4) {
return "Rosa";
} else if (numeroCor == 5) {
return "Preto";
} else if (numeroCor == 6) {
return "Branco";
} else if (numeroCor == 7) {
return "Dourado";
} else {
return "Lilás";
}
}
public int[] sortearSemRepetir(){
int[] n = new int[4];
boolean b;
do {
b = false;
for (int i = 0; i < n.length; i++) {
n[i] = (int) (Math.random() * 8 + 1);
}
for (int i = 0; i < n.length; i++) {
for (int j = 0; j < n.length; j++) {
if (i != j) {
if (n[i] == n[j]) {
b = true;
}
}
}
}
} while (b);
return n;
}
public String[] sortearCor(){
int[] n = sortearSemRepetir();
String[] c = new String[n.length];
for(int i=0; i<n.length; i++){
c[i]=verificaCor(n[i]);
}
return c;
}
}[/code]
Eu consegui criar um método que sorteou as 4 cores e não repetiu nenhuma, porém ele ficou
muito grande e pelos testes que ele faz eu percebo que dependendo do caso ela acaba usando
muita memória, uma vez chegou a demorar 2 seg para sortear a cor, o que eu achei muito!!
Precisava duma ajuda, para mudar essa lógica!! Fazer um método que resolva meu problema
de forma mais simples!
Classe Principal - para vocês entenderem como que eu estou fazendo!
[code]public class Principal {
public static void main(String[] args) {
Cor[] coresSorteadas = new Cor[4];
for(int i = 0; i < coresSorteadas.length; i++) {
coresSorteadas[i] = new Cor("");
}
System.out.println("=== CORES SECRETAS ===");
String[] c = coresSorteadas[1].sortearCor();
for(int i = 0; i < coresSorteadas.length; i++){
coresSorteadas[i].setNome(c[i]);
System.out.print("{" + coresSorteadas[i].getNome()+"} ");
}
}
}[/code]