Mega - Sena repetida :(

Fiz a algum tempo este programa, talves ajude

//Programa teste
import javax.swing.JOptionPane;

public class Teste {

	public static void main(String[] args) throws Exception {

		MegaSena f;

		System.out.println("MEGA SENA");
		int quantidade = Integer.parseInt(JOptionPane.showInputDialog("Escolha a quantidade de jogos a serem gerados"));
		f = new MegaSena();		
		f.GeraValores(quantidade);
		f.MostrarValoresGerados();

	}

}
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

public class MegaSena {

	List<Integer> lista = new ArrayList<Integer>();
	BufferedWriter mega;

	MegaSena() throws Exception {
		String nome = JOptionPane
				.showInputDialog("Digite o nome do arquivo de gravação.\nExemplo: loto.txt");
		mega = new BufferedWriter(new FileWriter(nome));
	}

	public void GeraValores(int quantidade) throws Exception {

		for (int i = 0; i < quantidade; i++) {
			mega.write("JOGO " + (i + 1) + "  =");

			for (int j = 0; j < 6; j++) {
				int r = (int) (1 + (Math.random() * 60));

				while (lista.contains(r))
					r = (int) (1 + (Math.random() * 60));

				lista.add(r);
				mega.write(" " + r);
			}
			lista.removeAll(lista);

			mega.write("\n");
		}
		mega.close();
		JOptionPane.showMessageDialog(null, " Jogos gravados com sucesso! ");
	}

	public void MostrarValoresGerados() throws Exception {

		String nome = JOptionPane
				.showInputDialog("Digite o nome do arquivo onde foram gravados os jogos feitos.\nExemplo: mega.txt");
		BufferedReader arquivo = new BufferedReader(new FileReader(nome));
		String linha = arquivo.readLine();

		while (linha != null) {
			System.out.println(linha);
			linha = arquivo.readLine();
		}
		arquivo.close();
	}
}

Velho, nem testei. Foi aqui no coder do GUJ mesmo.

Vê se é assim:

import java.util.Random;

public class Lels {

	public static void main(String[] args) {
		//Aqui será colocado os numeros randômicos.
		int temporario = 0;
		int[] sorteados = new int[6];

		Random r = new Random();

		for (int i = 0; i < sorteados.length; i++) {
			temporario = r.nextInt(60);

			for (int j = 0; j < sorteados.length; j++) {
				System.out.println("Verificando iguais...");

				if (sorteados[j] == temporario) {
					System.out.println("Escolhendo outro elemento...");
					temporario = r.nextInt(60);

				} 
					
				
			}
			sorteados[i] = temporario;
			System.out.println("Sorteado: " + sorteados[i]);
		}

		for (int k = 0; k < sorteados.length; k++) {
			System.out.println("Sorteado final: " + sorteados[k]);
		}

	}
}

Vê se compila ai.

Valeu.

Ok pessoal, vou usar os exemplos fornecidos para resolver o exercício aqui. Se ainda der errado eu tenho uma forca aqui comigo… Agradeços a todos do tópico!!

Opa, e8 acabei de fazer esse mesmo exercicio na faculdade …
eu fiz um while que induz a fazer o for do vetor até que todos os espaços do vetor estejam diferentes…

while(v[0]==v[1]||v[0]==v[2]…v[4]==v[5]

cara, testei seu codigo e eles saem repetidos, basta colocar em vez de 60, colocar 10 que ele mostra os numeros repetidos…

ae eu acabei de testar e tah funcionando sim, se vc colocar um while para quando ele der os valores não tem como ele fugir …
ele tem de fazer todos os numeros iguais para sair da repetição

[quote=guilherme marques]ae eu acabei de testar e tah funcionando sim, se vc colocar um while para quando ele der os valores não tem como ele fugir …
ele tem de fazer todos os numeros iguais para sair da repetição[/quote]

entendi, mas se fosse um vetor de 1000 posições estria perdido fazendo desta forma…

Da uma análisada ae e ver se te ajuda man, vlw.

[code]
for (int i = 0; i < 6;) {
aux = (int) (Math.random() * 60);

        for (int j = 0; j < 6;) {

            if (valores[j] == aux) {
                aux = (int) (Math.random() * 60);
                j = 0;
            } else {
                j++;
            }
        }
        valores[i] = aux;
        i++;

}[/code]

cara, testei seu codigo e eles saem repetidos, basta colocar em vez de 60, colocar 10 que ele mostra os numeros repetidos…[/quote]

Han? Mostra o teu codigo ai. Não faz sentido isso, ao menos na lógica, ele não mostraria mesmo.

Random rnd = new Random();
Set numerosSorteados = new HashSet();
while (numerosSortedos.size()<6){
  numerosSorteados.add(rnd.nextInt(60)+1);
}

Com isso você vai ter um Set com 6 objetos sorteados e todos serão diferentes.

Até!

Verdade. Testei aqui, ele só pula uma vez e por isso que acontece isso.

Deixa eu ajeitar…

cara, testei seu codigo e eles saem repetidos, basta colocar em vez de 60, colocar 10 que ele mostra os numeros repetidos…[/quote]

Han? Mostra o teu codigo ai. Não faz sentido isso, ao menos na lógica, ele não mostraria mesmo.[/quote]
eu soh mudei essa parte do codigo:

temporario = r.nextInt(60);

em vez de 60 coloquei 10, dai ele repetia alguns numeros…

Velho ,se vc btivesse 1000 posições em um array para checar, você só poderia fazer isso de dois jeitos: Ou criando uma espécie de índice para analisar ou um controle mais inteligente (o meu eu perco processamento, pq eu nao estou pesquisando nas posições que se abrem, estou pesquisando em todas mesmo quando só tem um elemento no array. Vou ajeitar isso.

[quote=leobr84]Da uma análisada ae e ver se te ajuda man, vlw.

[code]
for (int i = 0; i < 6;) {
aux = (int) (Math.random() * 60);

        for (int j = 0; j < 6;) {

            if (valores[j] == aux) {
                aux = (int) (Math.random() * 60);
                j = 0;
            } else {
                j++;
            }
        }
        valores[i] = aux;
        i++;

}[/code][/quote]

deu certo cara!! deu certo!!! 3 urras p vc!!
urra!! urra!! urra!!!

Bom pessoal, agradeço a todos por postarem aqui, sei que tenho muita coisa para ver e aprender, com certeza este site esta fazendo a diferença no meu estudo em JAVA. Quando minha bagagem cultural sobre JAVA for maior, também com certeza irei ajudar e repassar o conhecimento!
Mais uma vez obrigado!

[code]public class MegaSena
{
public static void main(String[] args)
{
Sorteio sorteio = new Sorteio(60);

    for (int i = 0; i < 6; i++)
        sorteio.sortear();

    System.out.println(sorteio.quantidadeSorteada()
            + " números foram sorteados: "
            + sorteio.getSorteados());
}

}[/code][code]
import java.util.Collections;
import java.util.Random;
import java.util.SortedSet;
import java.util.TreeSet;

public class Sorteio
{
private final int MAXIMO;
private Random rand;
private SortedSet sorteados;

public Sorteio(int tamanho)
{
    if (tamanho > 0)
    {
        MAXIMO = tamanho;
        rand = new Random();
        sorteados = new TreeSet<Integer>();
    } else
        throw new IllegalArgumentException("Tamanho deve ser maior que zero.");
}

public int sortear()
{
    int numero = 0;

    if (quantidadeSorteada() < MAXIMO)
    {
        do
        {
            numero = (int) (rand.nextFloat() * MAXIMO) + 1;
        }
        while (sorteados.contains(numero));

        sorteados.add(numero);
    }

    return numero;
}

public SortedSet<Integer> getSorteados()
{
    return Collections.unmodifiableSortedSet(sorteados);
}

public int quantidadeSorteada()
{
    return sorteados.size();
}

}[/code]

o que ide vcs estão usando ?
net beans ?

eu uso o netbeans

netbeans 6.0.1

[b]Caro sgtbreitner ,

Experimente fazer isso![/b]

[code]private static boolean temRepetido(int[] num) {
for (int i = 0; i < num.length - 1; i++) {
for (int j = i + 1; j < num.length; j++) {
if (num[i] == num[j]) {
return true;
}
}
}

	return false;

}

[/code]

implemente esse método e faça a chamada dele da seguinte forma :

[code]int[] num = new int[6];

	do {
		método para sortear os números aleatórios (num);
	} while (temRepetido(num));[/code]

[b]Qualquer dúvida poste ae cara, e lembre - se, mesmo sabendo que existe Collection Framework, se quer aprender arrays, tente fazer exemplos do tipo, vetores de ordenação, bubble sort, comparação de valores de indíce de vetores, e assim por diante …

Espero ter ajudado
na paz :)[/b]