[RESOLVIDO] - gerar números pares entre dois limites

13 respostas
M

Opaaa…

Seguinte, eu tenho que gerar e exibir números pares entre um intervalo que vai de limite1 a limite2, mas não estou conseguindo, meu código está assim:

public int geraExibePares(){ int numeros = limite1 +(int)( limite2*Math.random()); if(numeros%2==0){ . . . . . . } }

13 Respostas

E

Suponha que você queira gerar números pares aleatórios uniformemente distribuídos no intervalo [A, B] (onde A e B são pares, para facilitar)

Se você gerar um número aleatório inteiro no intervalo [0, (B - A) / 2], multiplicar o número por 2, e somar com A, não vai ter o número que você quer?

E

Wellington, vamos fazer algumas contas.

Digamos que A = 1900 e B seja 2030.

Então: B - A = 2030 - 1900 = 130

130 / 2 = 65

Vamos gerar um número aleatório x entre 0 e 65 (ou seja, r.nextInt (66), onde r é uma variável do tipo java.util.Random que foi previamente instanciada))

Digamos que o número gerado x tenha sido 0. Então A + 2x = 1900 + 2 * 0 = 1900

Digamos que o número gerado x tenha sido 65. Então A + 2x = 1900 + 2 * 65 = 1900 + 130 = 2030

Para um caso dentro dos limites, digamos que x tenha sido 10. Então A + 2x = 1900 + 20 = 1920.

Portanto, o que eu falei está certo.

douglaskd

entanglement:
Wellington, vamos fazer algumas contas.

Digamos que A = 1900 e B seja 2030.

Então: B - A = 2030 - 1900 = 130

130 / 2 = 65

Vamos gerar um número aleatório x entre 0 e 65 (ou seja, r.nextInt (66), onde r é uma variável do tipo java.util.Random que foi previamente instanciada))

Digamos que o número gerado x tenha sido 0. Então A + 2x = 1900 + 2 * 0 = 1900

Digamos que o número gerado x tenha sido 65. Então A + 2x = 1900 + 2 * 65 = 1900 + 130 = 2030

Para um caso dentro dos limites, digamos que x tenha sido 10. Então A + 2x = 1900 + 20 = 1920.

Portanto, o que eu falei está certo.

odoido!!!

só pegar o numero impar ou par dividir por 2 e multiplicar por 2

int impar = 7;

int par = (impar / 2) * 2 = 6
E

Douglas-san, o que você escreveu acha o maior par menor ou igual a um determinado número, mas isso resolve o problema do nosso amigo maxcanoas?

douglaskd
entanglement:
Douglas-san, o que você escreveu acha o maior par menor ou igual a um determinado número, mas isso resolve o problema do nosso amigo maxcanoas?

acho que sim

int gerarParEntre(int A,int B){

Random gerador = new Random();
int numero = ((gerador.nextInt(A) +  B-A) / 2) * 2;
return numero; //retorna sempre par
}

pois é...avaliei um pouco melhor, ficou igual ao seu rsrs, a ordem dos fatores não altera o produto

o meu A + rand(B-A) / 2 * 2

o seu A + 2 * (rand(B-A) )

E

Não é por nada não, mas o seu não funciona do jeito que você quer. Suponha que A = 10 e B = 100. No seu caso, você usou nextInt (10), o que diz que apenas 10 valores podem ser sorteados). Mas você, intuitivamente, deve saber que existem 91 valores possíveis entre 10 e 100, dos quais 46 são pares.

douglaskd

agora sim, não havia testado =P

Random gerador = new Random(); int numero = ((gerador.nextInt(B-A) + A) / 2) * 2; return numero; //retorna sempre par

Rodrigo_Sasaki

entanglement:
Suponha que você queira gerar números pares aleatórios uniformemente distribuídos no intervalo [A, B] (onde A e B são pares, para facilitar)

Se você gerar um número aleatório inteiro no intervalo [0, (B - A) / 2], multiplicar o número por 2, e somar com A, não vai ter o número que você quer?


Se ele entregar isso acho que vai ser o único que vai mandar pro professor uma solução que não seja o “brute force” óbvio :slight_smile:

E

Pergunta - no meu tempo, “gerar” era “enumerar”, não “gerar números aleatórios”. O seu problema, Max, não seria algo muito mais simples, algo como:

for (int i = A; i <= B; ++i) {
     if (i % 2 == 0)
          System.out.println (i);
}
Rodrigo_Sasaki

entanglement:
Pergunta - no meu tempo, “gerar” era “enumerar”, não “gerar números aleatórios”. O seu problema, Max, não seria algo muito mais simples, algo como:

for (int i = A; i <= B; ++i) { if (i % 2 == 0) System.out.println (i); }


Quando eu bati o olho na pergunta imaginei que era algo assim, aí depois escorreguei nas fórmulas matemáticas e não entendi mais nada hehehe

douglaskd

entanglement:
Pergunta - no meu tempo, “gerar” era “enumerar”, não “gerar números aleatórios”. O seu problema, Max, não seria algo muito mais simples, algo como:

for (int i = A; i <= B; ++i) { if (i % 2 == 0) System.out.println (i); }

após ver o outro post dele…tenho quase certeza que era isso ai…

WellingtonRamos

@entanglement, acho que seria [ A , (B - A) / 2 ].

WellingtonRamos

entanglement:
Wellington, vamos fazer algumas contas.

Digamos que A = 1900 e B seja 2030.

Então: B - A = 2030 - 1900 = 130

130 / 2 = 65

Vamos gerar um número aleatório x entre 0 e 65 (ou seja, r.nextInt (66), onde r é uma variável do tipo java.util.Random que foi previamente instanciada))

Digamos que o número gerado x tenha sido 0. Então A + 2x = 1900 + 2 * 0 = 1900

Digamos que o número gerado x tenha sido 65. Então A + 2x = 1900 + 2 * 65 = 1900 + 130 = 2030

Para um caso dentro dos limites, digamos que x tenha sido 10. Então A + 2x = 1900 + 20 = 1920.

Portanto, o que eu falei está certo.


É verdade. Falta de atenção minha.

Criado 8 de maio de 2013
Ultima resposta 8 de mai. de 2013
Respostas 13
Participantes 5