Preciso fazer com que três jogadores insiram 6 números não repetidos e no final do sorteio seja mostrado o vencedor e a quantidade de acertos feitos por cada um deles, porém não estou conseguindo desenvolver essa logica, alguém pode ajudar?
/**
* @param args
*/
public static void main(String[] args) {
System.out.println("****************************************************");
System.out.println(" MEGA SENA - Turma TADS - 2016 ");
System.out.println("****************************************************\n");
Scanner input = new Scanner(System.in);
int count = 0;
System.out.println("***Digite sua aposta contendo 6 números de 01 a 60***\n");
System.out.println("1º Número");
int Jogada1 = input.nextInt();
System.out.println("2º Número");
int Jogada2 = input.nextInt();
System.out.println("3º Número");
int Jogada3 = input.nextInt();
System.out.println("4º Número");
int Jogada4 = input.nextInt();
System.out.println("5º Número");
int Jogada5 = input.nextInt();
System.out.println("6º Número");
int Jogada6 = input.nextInt();
//int[][] matriz = new int[X][6] //Para aumentar o numero de resultados mude o X pra o valor desejado
int[][] matriz = new int[3000][6];
//for para preencher a matriz
for (int[] matriz1 : matriz) {
Set<Integer> numeros = new HashSet<>();
Random random = new Random();
//Sortear 6 dezenas
while (numeros.size() < 6) {
numeros.add(random.nextInt((60 - 1) + 1) + 1);
}
count = 0;
for (Integer i : numeros) {
matriz1[count] = i;
count ++;
}
count = 0;
}
//lista com 60 linhas com o valor 0
Map <Integer,Integer> map = new HashMap<>();
for(int i = 0; i <= 60; i++){
map.put(i, 0);
}
//Pesquisando e acrescentando valor do map de acordo com a chave.
int [] sorteio = new int[6];
String sorteioAux = "";
String sorteioOrdenadoAux = "";
int countLinha = 0;
for (int l = 0; l < matriz.length; l++){
countLinha ++;
for (int c = 0; c < 6; c++){
//get na chave do map
count = map.get(matriz[l][c]);
//put na chave do map incrementando o valor da chave.
map.put(matriz[l][c],count + 1);
//Adicionando a matriz em um array para ser ordenado
sorteio[c] = matriz[l][c];
}
//Ordenando resultados
Arrays.sort(sorteio);
//Recebendo resultado em um array ordenado
count = 0;
for (int num : sorteio) {
sorteioAux = sorteioAux + String.format("%02d", num) + "-";
sorteio[count] = 0;
}
sorteioAux = sorteioAux.substring(0, sorteioAux.length() - 1);
count = 0;
for (int c = 0; c < 6; c++){
sorteioOrdenadoAux = sorteioOrdenadoAux + String.format("%02d", matriz[l][c]) + "-";
sorteio[count] = 0;
}
sorteioOrdenadoAux = sorteioOrdenadoAux.substring(0, sorteioOrdenadoAux.length() - 1);
System.out.println("[Sorteio "+ String.format("%04d", l + 1) +"] = " + sorteioAux + " (" + sorteioOrdenadoAux + ")");
sorteioAux = "";
sorteioOrdenadoAux = "";
}
System.out.println("");
System.out.println("***********************************************");
System.out.println(" Números repetidos por sorteio ");
System.out.println("***********************************************");
//Imprimindo map com resultados da contagem
for(int i = 1; i <= 60; i++){
System.out.println("Numero " + String.format("%02d", i) + " repetiu : " + String.format("%02d", map.get(i))+ " vezes");
}
//Jogando em um set Array para eliminar as contagens repetidas
Set<Integer> setDezenasSorteadas = new HashSet<>();
for(int i = 0; i < map.size() ; i++){
setDezenasSorteadas.add(map.get(i));
}
//jogando em um array para poder ordenar a contagem
int[] arrayDezenasSorteadas = new int[setDezenasSorteadas.size()];
count = 0;
for(Integer i : setDezenasSorteadas){
arrayDezenasSorteadas[count] = i;
count ++;
}
//ordenando o array
Arrays.sort(arrayDezenasSorteadas);
int auxNumero = 0;
for(int i : arrayDezenasSorteadas){
if(auxNumero < i) {
auxNumero = i;
}
}
System.out.println("");
for(int i = 0; i < map.size() ; i++){
if(map.get(i) == auxNumero){
System.out.println("***********************************************");
System.out.println(" O Número " + i + " foi o que mais repetiu " + auxNumero + " vezes");
System.out.println("***********************************************");
break;
}
}
System.out.println("");
System.out.println("***************************************");
System.out.println("*** ****");
System.out.println("*** Duplas que mais saíram ****");
System.out.println("*** ****");
System.out.println("***************************************");
HashMap<String, Integer> numerosRepetidos = new HashMap<>();
int contadorRepetidos = 1;
for (int[] sorteioAtual : matriz) {
for (int j=0; j < 6; j++){
for (int k=j+1; k < 6; k++){
String dupla = sorteioAtual[j] + " e " + sorteioAtual[k];
if (numerosRepetidos.containsKey(dupla)){
numerosRepetidos.replace(dupla, ++contadorRepetidos);
}else{
numerosRepetidos.put(dupla, 1);
}
}
}
contadorRepetidos = 1;
}
Object[] a = numerosRepetidos.entrySet().toArray();
Arrays.sort(a, (Object o1, Object o2) -> ((Map.Entry<String, Integer>) o2).getValue()
.compareTo(((Map.Entry<String, Integer>) o1).getValue()));
int contadorVezes = 0;
for (Object e : a) {
contadorVezes++;
System.out.println(((Map.Entry<String, Integer>) e).getKey() + " Saíram: "
+ ((Map.Entry<String, Integer>) e).getValue() + " vezes");
if (contadorVezes == 15){
break;
}
}
}
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Random;
import java.util.Scanner;
public class teste {
public static void main(String[] args) {
System.out.println("****************************************************");
System.out.println(" MEGA SENA - Turma TADS - 2016 ");
System.out.println("****************************************************\n");
List<int[]> lista = new ArrayList<>();
for (int i = 0; i < 3; i++) { // define que sera para tres jogadores
System.out.println("***Jogador Nº:" + (i + 1) + " Digite sua aposta contendo 6 números de 01 a 60***\n");
lista.add(adicionarDadosJogador());
}
compararValores(lista, sortearOrdenarValores());
}
public static int[] adicionarDadosJogador() {
int[] jogada = new int[6]; //
Scanner input = new Scanner(System.in);
for (int i = 0; i < 6; i++) {
System.out.println((i + 1) + "º Numero");
int valor = input.nextInt();
while (valor < 0 || valor >= 60) { // Isso serve para preencher novamente caso o valor n seja maior q 0 ou menor igual a q 60
System.out.println((i + 1) + "º Numero"); // mensagem repete ate q seja validado
valor = input.nextInt();
}
jogada[i] = valor; // adiciona o valor a jogada
}
Arrays.sort(jogada);
return jogada;
}
public static int[] sortearOrdenarValores() {
Random random = new Random();
int[] resultado = new int[6];
for (int i = 0; i < 6; i++) {
int valor = random.nextInt(60);
resultado[i] = valor;
}
Arrays.sort(resultado);
return resultado;
}
public static void compararValores(List<int[]> jogadores, int[] resultado) {
for (int i = 0; i < 3; i++) { // exemplo de GET do list
int[] jogada = jogadores.get(i);
System.out.println("Jogador" + (i + 1)+" :"+Arrays.toString(jogada));
}
System.out.println("Resultado: "+Arrays.toString(resultado));
// ... Aqui vc coloca o comparador
}
}
Nos métodos q construí ele solicitara que o 3 jogadores preencham os valores. O resultado é gerado em seguida. Importante citar q coloquei um validador com o While no FOR, este validador garante q o valor digitado pelo jogador seja maior que 0 e menor igual a 60.
Não coloquei seu algoritmo de classificação pois achei confuso, e precisaria de detalhes de quais tipos de resultados podem ser adquiridos pelo sistema.
Não sei se você já aprendeu a criar métodos, se aprendeu, toda a logica fica melhor com eles. Caso não tenha aprendido e’ chato mesmo colocar tudo dentro do main.