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).
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.
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.
// 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).
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
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).
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:
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