o uma forma de fazer é assim... ve como ficou a classe general
Classe
DADO
import java.util.Random;
public class Dado implements Comparable<Dado> {
public static final Dado UM = new Dado(6,1);
public static final Dado DOIS = new Dado(6,2);
public static final Dado TRES = new Dado(6,3);
public static final Dado QUATRO = new Dado(6,4);
public static final Dado CINCO = new Dado(6,5);
public static final Dado SEIS = new Dado(6,6);
private static final Random roleta = new Random();
private int value = 0;
private int faces = 6;
public Dado() {
lancar();
}
public Dado(int faces, int value) {
this.faces = faces;
this.value = value;
}
public Dado(int faces) {
this.faces = faces;
lancar();
}
public int lancar() {
return value = 1 + roleta.nextInt(faces);
}
@Override
public int hashCode() {
int hash = 0;
hash = hash + this.value * this.faces;
return hash;
}
public boolean equals(Object o) {
if (o instanceof Dado)
return equals((Dado)o);
return false;
}
public boolean equals(Dado dado) {
return (value == dado.getValue()) ? true : false;
}
public int getValue() {
return value;
}
public int compareTo(Dado o) {
return this.value - o.value;
}
public String toString() {
return String.valueOf(value);
}
}
Classe
JogoGeneral
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class JogoGeneral {
List<Dado> dados = new ArrayList<Dado>(5);
public JogoGeneral() {
for (int i = 0; i < 5; i++)
dados.add(new Dado(6));
Collections.sort(dados);
}
public List<Dado> getDados() {
return dados;
}
public ResultadoJogoGeneral getResultado() {
return ResultadoJogoGeneral.getResult(this);
}
public String toString() {
return Arrays.toString(dados.toArray());
}
}
Enum
ResultadoJogoGeneral
[size=18]
[color=red]Obs.: Se não souber como funciona o Enum direito, da um toque que eu te explico[/color][/size]
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
public enum ResultadoJogoGeneral {
/**
* Todos os 5 dados iguals por exemplo [3,3,3,3,3]
*/
GENERAL("General") {
public boolean teste(JogoGeneral jogo) {
Set<Dado> resultados = new HashSet<Dado>();
resultados.addAll(jogo.getDados());
return resultados.size() == 1;
//Set só aceita 1 objeto de cada tipo, sendo assim quando vc joga todos os dados em um Set
//se o Set só contem um valor, é pq todos os dados são iguais.
}
},
/**
* Quando 4 dos 5 dados são iguais, por exemplo [1,5,5,5,5]
*/
QUADRA("Quadra") {
public boolean teste(JogoGeneral jogo) {
Set<Dado> resultados = new HashSet<Dado>();
resultados.addAll(jogo.getDados());
if (resultados.size() != 2)
return false;
Dado primeiro = (Dado)resultados.toArray()[0];
int contagem = Collections.frequency(jogo.getDados(), primeiro);
return contagem == 4 || contagem == 1;
//Seguindo o mesmo raciocinio do General, em um Set dos dados
//Quando há quadra, devem existir 2 dados no set
//e devem haver 4 dados de um tipo e 1 do outro, ou seja, o primeiro dado
//deve conter 4 ou 1 nos jogos.
}
},
/**
* Quando há 2 e 3 dados iguais, por exemplo [4,4,4,5,5]
*/
FULA("Fula") {
public boolean teste(JogoGeneral jogo) {
Set<Dado> resultados = new HashSet<Dado>();
resultados.addAll(jogo.getDados());
if (resultados.size() != 2)
return false;
int contagem = Collections.frequency(jogo.getDados(), (Dado)resultados.toArray()[0]);
return contagem == 2 || contagem == 3;
//Seguindo o mesmo raciocinio do General, em um Set dos dados
//Quando há fula, devem existir 2 dados no set
//e devem haver 3 dados de um tipo e 2 do outro, ou seja, o primeiro dado
//deve conter 3 ou 2 nos jogos.
}
},
/**
* Quando há uma sequencia, por exemplo [2,3,4,5,6]
*/
SEQUENCIA("Sequencia") {
public boolean teste(JogoGeneral jogo) {
Set<Dado> resultados = new HashSet<Dado>();
resultados.addAll(jogo.getDados());
if (resultados.size() != 5)
return false;
return !(resultados.contains(Dado.UM) && resultados.contains(Dado.SEIS));
//Seguindo o mesmo raciocinio do General, em um Set dos dados
//Quando há sequencia, devem existir 5 dados no set, pois todos são diferentes
//e os 5 dados devem ser uma sequencia, para tal,
//quando há 1, o 6 não pode existir, ou seja [1,2,3,4,5]
//e quando há 6, o 1 não pode existir, ou seja [2,3,4,5,6]
//sendo assim quando resultado não contiver 1 e 6 ao mesmo tempo
}
},
NENHUM("Nenhum") {
public boolean teste(JogoGeneral jogo) {
return (getResult(jogo) == NENHUM) ? true : false;
}
};
public static ResultadoJogoGeneral getResult(JogoGeneral jogo) {
for (int i = 0; i < 4; i++)
if (values()[i].teste(jogo))
return values()[i];
return values()[4];
}
private final String nome;
private ResultadoJogoGeneral(String nome) {
this.nome = nome;
}
abstract public boolean teste(JogoGeneral jogo);
public String toString() {
return nome;
}
}
.........
Uma pequena rotina de 10 jogos
public static void main(String[] args) {
JogoGeneral jogo;
for (int i = 0; i < 10; i++) {
jogo = new JogoGeneral();
System.out.print("Jogo = " + jogo);
System.out.println(" , resultado = " +jogo.getResultado());
}
}