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

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){ . . . . . . } }

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?

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.

[quote=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. [/quote]

odoido!!!

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

int impar = 7;

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

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

[code]int gerarParEntre(int A,int B){

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

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

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.

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

[quote=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?

[/quote]
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:

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);
}
1 curtida

[quote=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); } [/quote]
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

[quote=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); } [/quote]

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

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

[quote=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. [/quote]
É verdade. Falta de atenção minha.