[Resolvido] Divisão com Inteiros

17 respostas
Marcello360

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));

17 Respostas

victormagno

Editado… tinha entendido outra coisa.

thiago_pco

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

victormagno

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.

TerraSkilll
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 [email removido] propôs. Algo do tipo:
int num1 = (int) (Math.random() * 1000);

int num2 = (int) (Math.random() * 1000);

while (num1 % num2 != 0)
  num2 = (int) (Math.random() * 1000);
Abraço.
victormagno

O código abaixo é mais preciso, pois realiza a busca por divisores baseado apenas em números válidos.

List<Integer> divisores = new ArrayList<Integer>();
		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);

Não utilizei decomposição como havia dito pois iria onerar o custo computacional desnecessariamente.

Marcello360

Pessoal vou testar aqui na aplicação as soluções passadas. coloco o resultado em breve…

T

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.

Marcello360

pessoas prometi que diria aqui a solução caso conseguisse resolver e consegui fiz da seguinte maneira:

gerei os aleatorios
public int numerosAleaDivi1(){
		return  (int) (1 + (Math.random() * 10));
	}
	
	public int numerosAleaDivi2(){
		return  (int) (1 + (Math.random() * 10));
		}

e criei o metodo para impressão no frame

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();
	   }
	}
Marcello360

Obrigado a todos pelo tempo gasto me ajudando a resolver. :smiley:

pmlm

Não era mais fácil gerar aleatoriamente o divisor e o quociente?

Marcello360

mas ja esta gerados…

pmlm

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.

Marcello360

tem um exemplo simples para eu ver??

T

É 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ç.

Marcello360

TiagoSena tbm pensei assim pra resolver.

T

Recomendo a leitura do Java Use a Cabeça.

Explica muito bem essa parte de como planejar o programa antes de programar.

Marcello360

certo!

Criado 8 de novembro de 2012
Ultima resposta 8 de nov. de 2012
Respostas 17
Participantes 6