Sorteio de numeros aleatorios

[color=black][/color]

ola, vamos ver se alguem pode me ajudar?? urgente?? bom exercicio para matar o tempo
obrigado a todos.

Escrever um programa usando interface grafica swing que gere 200 numeros aleatorios no intervalo escolhido entre [20-400],[400-780],[60-1180] e mostre em um label qual o numero do intervalo escolhido que mais ocorreu.

a) gravar os dados em um arquivo de texto

b) usar showinputdialog com uma caixa de combinacao para escolha

c)deve haver um formulario no fundo para iniciar a opção de escolher do usuario.

d) caso haja uma escolha de um novo intervalo realizar a pergunta se deseja criar um novo arquivo de texto ou inserir no mesmo.

obs: se for solicitada a opção para criar um novo arquivo abrir uma caixa de input( para inserir o nome).

Oi elthoncg,

Infelizmente (pra muitos) e felizmente(pra poucos) o objetivo do fórum não é fornecer código pronto e sim auxiliar o GUJeiro em suas dúvidas… Se você quer o código pronto, infelizmente aqui não é o lugar… Mas se você quer tentar,quebrar a cabeça, ter ajuda e resolver seu problema…Pode contar conosco.

Você já começou a fazer algo?

 Bom, para você gerar os números aleatórios utilize o método:
   Math.random()
Esse método gera números aleatórios entre 0 e 1, portanto para obter os números de algum intervalo é só normalizá-los!

 e.g. a expressão:
   Math.random() * 400
 irá lhe retornar valores randômicos no intervalo de 0 à 400.

Abs,
Isaac 'Stevão Sena.

a minha duvida é essa aqui.
gerar 200 numeros aleatorios dentro destes arrays [20-400],[400-780],[60-1180]
eu nao estou conseguindo gerar mais que um numero automatico.
eu executo Math.random() * 400
mais ele retorna cada hora “01”.
teria como eu retornar “200” numeros aleatorios de uma vez só quando executasse a operação??
não sei como fazer isso.

PODERIA ME AJUDAR AMIGO SOMENTE NESTA PARTE.

DESDE JA AGRADEÇO.

para cada Array tenta algo do tipo:

      // de 20 a 400
    int vet[] = new int[200]

     for(int i=0; i<200; i++){      //percorre seu Array de 200 posições
         vet[i] = random.nextInt(400)+20;  //Dessa maneira ele irá povoar seu Array com randons de 20 a 400
         }

Os outros vc faz do mesmo jeito!
Espero ter ajudado!

Bom, quanto à gerar mais de um número, é bem simples. É só você colocar um [i]loop[/i] e armazenar os números gerados dentro de algum vetor. Abaixo segue um modelo "bem simples" de como gerar os números aleatórios e guardá-los:

// autor: Isaac Sena
// data: out/10
// gerador e armazenador de números aleatórios: numRand.java

class numRand
{
	public static void main( String args[] )
	{
		int x = 1;		

		// inicializa 2 vetores
		int vectRandA[] = {0,0,0,0,0};		
		int vectRandB[] = {0,0,0,0,0};

		for (int i = 0; i < 5 ; i++)
		{
			int num1 = (int) (Math.random() * 30);
			int num2 = (int) (Math.random() * 1000);

			vectRandA[i] = num1;
			vectRandB[i] = num2;
			
			x = x + i;

			System.out.println(x + "º número do vetor A: " 
				+ vectRandA[i] + " (intervalo de 0 à 30)" );

			System.out.println(x + "º número do vetor B: " 
				+ vectRandB[i] + " (intervalo de 0 à 1000)" );

		} // fim de for

	} // fim do método main

} // fim da classe numRand
 A saída gerada seria a seguinte:

1º número do vetor A: 2 (intervalo de 0 à 30)
1º número do vetor B: 957 (intervalo de 0 à 1000)

2º número do vetor A: 11 (intervalo de 0 à 30)
2º número do vetor B: 606 (intervalo de 0 à 1000)

3º número do vetor A: 19 (intervalo de 0 à 30)
3º número do vetor B: 650 (intervalo de 0 à 1000)

4º número do vetor A: 19 (intervalo de 0 à 30)
4º número do vetor B: 709 (intervalo de 0 à 1000)

5º número do vetor A: 1 (intervalo de 0 à 30)
5º número do vetor B: 469 (intervalo de 0 à 1000)


 Você também poderia usar uma subclasse [i]java.lang.Thread[/i] gerando valores aleatórios em intervalos diferentes (acredito que iria otimizar mais o seu código).

Abs,
Isaac Sena.

Olá Ermin, essa instrução poderia gerar valores maiores do que 400. Qualquer valor no intervalo [380, 400] gerado pelo método random.nextInt(400) e somado com 20, passa o limite superior do intervalo [20, 400]. Para resolver esse problema, a princípio, eu colocaria uma verificação, como segue:

// author: Isaac Sena
// data: out/10
// gerador de números aleatórios

class numRandVerif
{
	public static void main( String args[] )
	{
		int x = 1;

		int vectRand[] = new int[5];		

			System.out.println("\nIntervalo: [20, 50]\n\n" );

		for (int i = 0; i < 5 ; i++)
		{
			int numRand = (int) (Math.random() * 50);

			System.out.println("valor de numRand: " + numRand);

			if (numRand < 20 ){
			numRand = numRand + 20;
			System.out.println("O valor gerado foi menor do que o do limite inferior do intervalo, então acrescento + 20: " + numRand);
			}

			vectRand[i] = numRand;
			
			x = x + i;

			System.out.println(x + "º número do vetor: " 
				+ vectRand[i] + "\n");

			x = 1;
		} // fim de for

	} // fim do método main

} // fim da classe numRandVerif

Neste caso eu coloquei um intervalo menor (a fim de tornar mais provável algum valor menor que o limite inferior).

A saída gerada seria a seguinte:

Intervalo: [20, 50]

valor de numRand: 32
1º número do vetor: 32

valor de numRand: 1
O valor gerado foi menor do que o do limite inferior do intervalo, então acrescento + 20: 21
2º número do vetor: 21

valor de numRand: 44
3º número do vetor: 44

valor de numRand: 0
O valor gerado foi menor do que o do limite inferior do intervalo, então acrescento + 20: 20
4º número do vetor: 20

valor de numRand: 24
5º número do vetor: 24


Abs,
Isaac Sena.

deu certo sim. muito obrigado vcs me ajudaram muito.

 Olá elthoncg, para tornar o seu código estatisticamente mais rigoroso coloque um [i]while[/i] no lugar do [i]if[/i]. Se você faz o [i]if[/i] acrescentando +20, alguns números tornam mais prováveis do que outros. No exemplo que eu coloquei, os números do intervalo [20, 40] são mais prováveis do que os números de ]40, 50] (intervalo aberto em 40).

 No lugar do [i]if[/i] coloque a seguinte instrução:
while (numRand < 20)
{
int numRand = (int) (Math.random() * 50);
}
 Isso vai forçar o seu programa a sempre gerar números entre 20 e 50 tornando a distribuição da probabilidade mais "justa" (ela vai depender apenas de como o método gera o número, o que "não seria nosso" problema).

Abs,
Isaac Sena.

antes de mais nada quero agradecer a ajuda de vcs consegui chegar até aqui.

esta funcionando corretamente…

tenho outra duvida… Gostaria de saber como armazenar o resultado dos numeros sorteados em arquivo .txt…

eu posso usar FileWriter arquivo = new FileWriter se der obrigado até aqui!!!

import static javax.swing.JOptionPane.showInputDialog;
import static javax.swing.JOptionPane.showMessageDialog;

public class random {

public static void main(String[] args) {

    double resposta = 0;
    int opcao = 0;
    while (opcao != 4) {

        showMessageDialog(null, "1. [20-400] \n2.[400-780]\n3.[780-1180]\n4. Sair");
        opcao = Integer.parseInt(showInputDialog(null, "Entre com a Opção: "));

        if (opcao == 1) {
            int x = 1;

            int vectRand[] = new int[200];

            System.out.println("\nIntervalo: [20, 400]\n\n");

            for (int i = 0; i < 200; i++) {
                int numRand = (int) (Math.random() * 400);

                System.out.println("valor de numRand: " + numRand);

                if (numRand < 20) {
                    numRand = numRand + 20;
                    System.out.println("O valor gerado foi menor do que o do limite inferior do intervalo, então acrescento + 20: " + numRand);
                }

                vectRand[i] = numRand;

                x = x + i;

                System.out.println(x + "º número do vetor: "
                        + vectRand[i] + "\n");

                x = 1;
            }
        }

        if (opcao == 2) {
            int x = 1;

            int vectRand[] = new int[200];

            System.out.println("\nIntervalo: [400,780]\n\n");


            for (int i = 0; i < 200; i++) {
                int numRand = (int) (Math.random() * 780);

                System.out.println("valor de numRand: " + numRand);

                if (numRand < 400) {
                    numRand = numRand + 400;
                    System.out.println("O valor gerado foi menor do que o do limite inferior do intervalo, então acrescento + 400: " + numRand);
                }

                if (numRand > 780) {
                    numRand = numRand - 20;
                    System.out.println("O valor gerado foi maior do que o permitido, então desconta -20: " + numRand);
                }

                vectRand[i] = numRand;

                x = x + i;

                System.out.println(x + "º número do vetor: "
                        + vectRand[i] + "\n");

                x = 1;
            }
        }

        if (opcao == 3) {
            int x = 1;

            int vectRand[] = new int[200];

            System.out.println("\nIntervalo: [60,1180]\n\n");

            for (int i = 0; i < 200; i++) {
                int numRand = (int) (Math.random() * 1180);

                System.out.println("valor de numRand: " + numRand);

                if (numRand < 60) {
                    numRand = numRand + 60;
                    System.out.println("O valor gerado foi menor do que o do limite inferior do intervalo, então acrescento +60: " + numRand);
                }

                if (numRand > 1180) {
                    numRand = numRand - 400;
                    System.out.println("O valor gerado foi maior do que o permitido, então desconta -400: " + numRand);
                }

                vectRand[i] = numRand;

                x = x + i;

                System.out.println(x + "º número do vetor: "
                        + vectRand[i] + "\n");

                x = 1;
            }
        }
            if (opcao != 4) {
                showMessageDialog(null,  "" );

            }
        }

    }
}

Olá Elthon, segue o código de como que você poderia gravar os números em um “arquivo.txt”.

import static javax.swing.JOptionPane.showInputDialog;
import static javax.swing.JOptionPane.showMessageDialog;
import javax.swing.*;
import java.io.*;


public class random 
{
	public static void main(String[] args)
	{

		try
		{	
			double resposta = 0;
			int opcao = 0;


			String diretorio = ".";
			StringBuilder texto = new StringBuilder();

			while (opcao != 2)
			{

				// Menu princial: Coletor das opções
				opcao = Integer.parseInt(JOptionPane.showInputDialog(null, "Escolha o"+
					" intervalo em que serão gerados os números randômicos:\n\n"+
					"1.    [20 - 400]\n\n"+
					"2.    Sair\n\n" ,
					"Gerador de Números Randômicos", JOptionPane.PLAIN_MESSAGE)); 

				// caso opção 1
				if (opcao == 1)
				{
					int vectRand[] = new int[200];

					showMessageDialog(null, "\nIntervalo escolhido:\n\n[20, 400]\n\n" );

					for (int i = 0; i < 10; i++) // esse loop vai gerar 10 números randômicos
					{
						int numRand = (int) (Math.random() * 400);
		
							while (numRand < 20)
							{
								numRand = (int) (Math.random() * 400); // força o programa a SEMPRE gerar números entre 20 e 400.
							}

						vectRand[i] = numRand;
						texto.append((i+1) + "º número: " + vectRand[i] + "\n");

					} // fim de for
				} // fim da opção 1

				// gravando os números em um arquivo .txt

            File arquivo = new File(diretorio, "intervalo_20-400.txt");
		      FileWriter escritor = new FileWriter(arquivo);

            // Buffer é preparado para receber o texto
            BufferedWriter saida = new BufferedWriter(escritor);

            // O texto é transferido para o arquivo
            escritor.write(texto.toString());

				// Fecha o buffer -> salva o arquivo;
            saida.close();

				//	Painel para voltar ao menu
				if (opcao != 2)
					showMessageDialog(null, "Os números foram gerados com"+
						" sucesso!\n\nVoltar ao Menu\n\n" );

			} // fim do while

		} catch(Exception ex) {
			ex.printStackTrace();
		}

	} // fim de main
} // fim da classe random

Esse código gera em um arquivo .txt uma saída como a que segue:

================

1º número: 84
2º número: 153
3º número: 49
4º número: 383
5º número: 368
6º número: 66
7º número: 157
8º número: 381
9º número: 29
10º número: 300

==============

Ele coloquei alguns comentário no corpo do código, mas se você tiver alguma dúvida pode perguntar.

Abs,
Isaac 'Stevão Sena.

isaac vc esta me ajudando bastante… fiz agora com o exemplo que vc me deu…

perceba no codigo que deixei alguns comentarios!!!

esta gravando corretamente…
só que eu preciso deixar uma input text perguntando se deseja gravar o arquivo em um outro local???

ja tentei diversas maneiras , mas até agora ela não grava no diretorio que eu desejo na label…

consegue me ajudar amigo

valeu até+

obrigado

 Olá Elthon, para você criar um diretório, use o método [i]mkdir()[/i]. Abaixo eu peguei o mesmo código que postei ontem adicionado desse método. O programa permite que o usuário forneça o nome do diretório que será gravado (caso já exista) ou crie um novo. Se o diretório já existe, ele irá apenas alocar os novos arquivos.txt gerados.

Qualquer dúvida pode perguntar.

import static javax.swing.JOptionPane.showInputDialog;  
import static javax.swing.JOptionPane.showMessageDialog;  
import javax.swing.*;  
import java.io.*;  
  
  
public class random   
{  
    public static void main(String[] args)  
    {  
  
        try  
        {     
            double resposta = 0;  
            int opcao = 0;  
  
  

            StringBuilder texto = new StringBuilder();  
  
            while (opcao != 2)  
            {  
  
                // Menu princial: Coletor das opções  
                opcao = Integer.parseInt(JOptionPane.showInputDialog(null, "Escolha o"+  
                    " intervalo em que serão gerados os números randômicos:\n\n"+  
                    "1.    [20 - 400]\n\n"+  
                    "2.    Sair\n\n" ,  
                    "Gerador de Números Randômicos", JOptionPane.PLAIN_MESSAGE));   
  
                // caso opção 1  
                if (opcao == 1)  
                {  
                    int vectRand[] = new int[200];  
  
                    showMessageDialog(null, "\nIntervalo escolhido:\n\n[20, 400]\n\n" );  
  
                    for (int i = 0; i < 10; i++) // esse loop vai gerar 10 números randômicos  
                    {  
                        int numRand = (int) (Math.random() * 400);  
          
                            while (numRand < 20)  
                            {  
                                numRand = (int) (Math.random() * 400); // força o programa a SEMPRE gerar números entre 20 e 400.  
                            }  
  
                        vectRand[i] = numRand;  
                        texto.append((i+1) + "º número: " + vectRand[i] + "\n");  
  
                    } // fim de for  


                      // Pega o nome do diretório (ou cria um novo) para armazenar o arquivo.txt            <------------------------- Aqui está a diferença do código anterior!!!!!!
                      String nome_diretorio = JOptionPane.showInputDialog(null, "Digite o"+  
					 	" nome do diretório que será gravado os arquivos");

				      File diretorio = new File(nome_diretorio);
				      diretorio.mkdir();

				      // gravando os números em um arquivo .txt		  
				      File arquivo = new File(nome_diretorio, "intervalo_20-400.txt");
				        FileWriter escritor = new FileWriter(arquivo);  
		  
				      // Buffer é preparado para receber o texto  
				      BufferedWriter saida = new BufferedWriter(escritor);  
		  
				      // O texto é transferido para o arquivo  
				      escritor.write(texto.toString());  
		  
						// Fecha o buffer -> salva o arquivo;  
				      saida.close();  

                } // fim da opção 1  
  

                //  Painel para voltar ao menu  
                if (opcao != 2)  
                    showMessageDialog(null, "Os números foram gerados com"+  
                        " sucesso!\n\nVoltar ao Menu\n\n" );  
  
            } // fim do while  
  
        } catch(Exception ex) {  
            ex.printStackTrace();  
        }  
  
    } // fim de main  
} // fim da classe random

Isac sem querer abusar demais de vc cara,
mas como é que eu ordeno os numeros que
vão ser gravados no arquivo .txt???

usei o sort, mais o meu professor para eu fazer um
for e percorrer a lista e comparar.

e depois como saber quantos vezes o mesmo numero se repete…

pode me ajudar… o codigo ja esta postado ai em cima…

muito obrigado…

show