[Resolvido] Divisão com Inteiros

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. :smiley:

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!