como faço uma aplicação que gere numeros aleatorios tando no divisor como no dividendo e a divisão sempre ser inteira??
fiz a geração dos numeros assim:
num1 = (int) (1 + (Math.random() * 10));
num2 = (int) (1 + (Math.random() * 10));
como faço uma aplicação que gere numeros aleatorios tando no divisor como no dividendo e a divisão sempre ser inteira??
fiz a geração dos numeros assim:
num1 = (int) (1 + (Math.random() * 10));
num2 = (int) (1 + (Math.random() * 10));
Editado… tinha entendido outra coisa.
Cara, acho q n tem como. Já q o divisor e o dividendo vão ser gerados aleatoriamente.
O que vc pode fazer é:
int a = Math.random();
int b = Math.random();
if(a%b == 0){
//Aki vc usa pra o q kiser!
}
Caso precise de algo mais específico so detalhar mais o precisa.
FLw’s
Você pode fazer da seguinte forma:
Gere um número randomico (NUM1) para o ser usado como dividendo - Escolha o range que quiser;
Faça a decomposição de NUM1 e guarde os resultados em uma lista - Agora você tem todos os divisores possíveis de NUM1 para que a divisão resulte em um numero inteiro;
Pegue aleatoriamente um número (NUM2) dessa lista e faça a divisão de NUM1 por NUM2;
O resultado obtido será um número inteiro.
O desempenho não deve ser dos melhores (mas não deve chegar a ser crítico), mas você pode gerar o num1 e, baseado nele, gerar um num2 capaz de retornar uma divisão inteira, similar ao que o thiago_pco@hotmail.com propôs. Algo do tipo:
[code]int num1 = (int) (Math.random() * 1000);
int num2 = (int) (Math.random() * 1000);
while (num1 % num2 != 0)
num2 = (int) (Math.random() * 1000);[/code]Abraço.
O código abaixo é mais preciso, pois realiza a busca por divisores baseado apenas em números válidos.
[code] List divisores = new ArrayList();
int dividendo = (int) (1 + Math.random() * 1000000);
for (int i = 1; i <= dividendo; i++ ){
if(dividendo%i == 0) divisores.add(i);
}
int quociente = dividendo/divisores.get((int) (1 + Math.random() * divisores.size() - 1 ));
System.out.println(quociente);
[/code]
Não utilizei decomposição como havia dito pois iria onerar o custo computacional desnecessariamente.
Pessoal vou testar aqui na aplicação as soluções passadas. coloco o resultado em breve…
Boa tarde Marcello
Primeiro você tem 2 problemas para resolver
a - Gerar números aleatórios
b - Divisão ser sempre inteira
1 - Para gerar números aleatórios você pode usar a linha abaixo direto que dá certo
int num1 = (int) ((Math.random()*100));
int num2 = (int) ((Math.random()*100));
2 - Para que a divisão seja sempre inteira ou seja inteira já esperada existem muitas formas
mas a mais simples é já pré-supor que os números divisor e dividendo já são inteiros e que sempre
o dividendo será maior que o divisor para que se tenha o resultado inteiro.
3 - Uma tática muito boa é usar o parâmetro (int) que é um conversor para o tipo int
ou seja ele já garante que o num1 e o num2 vão receber números int vindos da Math.random.
Se observar bem eu já fiz duas coisas ao mesmo tempo
declarei e já atribui um valor vindo de Math.random
depois é só dividir normalmente
int resultado= num1 / num2;
Abaixo tem o código completo
public class Ex1 {
public static void main(String[] args) {
int num1 = (int) ((Math.random()*100));
int num2 = (int) ((Math.random()*100));
int resultado = num1 / num2;
System.out.println("Teste");
System.out.println(num1);
System.out.println(num2);
System.out.println(resultado);
}
}
Se tiver mais dúvidas ou eu não tiver respondido direito é só falar que
eu tento ajudar de outra forma.
Abraço e sucesso.
pessoas prometi que diria aqui a solução caso conseguisse resolver e consegui fiz da seguinte maneira:
gerei os aleatorios
[code] public int numerosAleaDivi1(){
return (int) (1 + (Math.random() * 10));
}
public int numerosAleaDivi2(){
return (int) (1 + (Math.random() * 10));
}[/code]
e criei o metodo para impressão no frame
[code]public void divisao(){
confirmaDivisao.setVisible(true);
enunciado.setVisible(true);
respostaOp.setVisible(true);
nume1.setVisible(true);
sinal.setVisible(true);
nume2.setVisible(true);
igual.setVisible(true);
num1 = numerosAleaDivi1();
num2 = numerosAleaDivi2();
enunciado.setText("Resolva as Divisões que irão aparecer: ");
if ( (num1 % num2) == 0){
//multDiv = num1 % num2;
//num1 = numerosAleaDivi1();
//num2 = numerosAleaDivi2();
nume1.setText(""+num1);
sinal.setText("/");
nume2.setText(""+num2);
resposta12 = num1 / num2;
}
else{
divisao();
}
}
[/code]
Obrigado a todos pelo tempo gasto me ajudando a resolver.
Não era mais fácil gerar aleatoriamente o divisor e o quociente?
mas ja esta gerados…
Em vez de gerares um dividendo e um divisor n vezes até dar uma divisão inteira, geras o divisor e o quociente, multiplicas e tens o dividendo, sem entrar nessa recursão desnecessária.
tem um exemplo simples para eu ver??
É um ótimo ponto de vista.
Mas vale lembrar que o mais importante é a especificação.
Se a especificação disser que tem que ser um programa enxuto sem recursão desnecessária
e também que os valores podem mesmo ser Aleatórios, então pode usar essa tática pois eliminará
o if que verifica se já é ou não exata e retira a recursividade.
Mas se no meio do processo a especificação mudar e disser que agora os números vão ser digitados
pelo usuário…Aí vai ter que alterar muita coisa.
Acho que uma solução para enlaçar tudo isso seria colocar o if e o else também dentro de um método
que teria como tarefa verificar se é ou não divisão exata.
Temos que tomar cuidado com a especificação pois se ela mudar e a gente não tiver feito um bom código
aí dá problema. Tem que pensar em que tipo de dado ou objeto ou coisa, o programa vai receber
e não ir direto ao ponto pensando em o que o programa tem que fazer…
Deixo minha dica para ajudar.
Abç.
TiagoSena tbm pensei assim pra resolver.
Recomendo a leitura do Java Use a Cabeça.
Explica muito bem essa parte de como planejar o programa antes de programar.
certo!