Preciso gerar uma lista de 10 números aleatórios entre 1 e 20, sendo que 5 números precisam ser pares e 5 ímpares. Consegui gerar 10 números aleatórios dos 20, mas não estou conseguindo fazer com que imprima apenas 5 pares e 5 ímpares na mesma linha.
List<Integer> lista = new ArrayList<Integer>();
int numero;
while (lista.size() < 10) {
numero = 1 + (int) (Math.random() * 20);
if (!lista.contains(numero)) {
lista.add(numero);
}
}
for (Integer n : lista) {
System.out.print(n + " ");
}
Quando a isso tranquilo, não estou conseguindo fazer com que ele imprima 5 ímpares e 5 pares.
Ajustei o código abaixo, mas ele só imprime par (meio óbvio pq adicionei o if que verifica se é divisível por 2). Como faço para ele imprimir 5 ímpares, além de 5 pares?
List<Integer> lista = new ArrayList<Integer>();
int numero;
while (lista.size() < 10) {
numero = 1 + (int) (Math.random() * 20);
if (numero % 2 == 0) {
if (!lista.contains(numero)) {
lista.add(numero);
}
}
}
for (Integer n : lista) {
System.out.print(n + " ");
}
public static void main(String[] args) {
List<Integer> par = Arrays.asList(2, 4, 6, 8, 10, 12, 14, 16, 18, 20); //numeros pares possíveis, podia ser inicializado com o for
List<Integer> impar = Arrays.asList(1, 3, 5, 7, 9, 11, 13, 15, 17, 19); // numeros impares possíveis, podia ser inicializado com o for
Collections.shuffle(par); // Embaralha pares
Collections.shuffle(impar); // Embaralha impares
List<Integer> resultado = new ArrayList<>(par.subList(0, 5)); // Obtem 5 pares da lista embaralhada de pares
resultado.addAll(impar.subList(0, 5)); // Obtem 5 impares da lista embaralhada de impares
Collections.shuffle(resultado); // Embaralha o resultado (senão seriam sempre 5 pares seguidos de 5 impares)
resultado.forEach(System.out::println); //Imprime os valores
}
public static void main(String[] args) {
List<Integer> lista = new ArrayList<Integer>();
int pares = 0;
int impares = 0;
int max = 5;
while (lista.size() < 10) {
int numero = 1 + (int) (Math.random() * 20);
if (!lista.contains(numero)) {
if (numero%2==0 && pares<max) { //so adiciona se numero for par e ainda nao estiverem todos os pares adicionados
lista.add(numero);
pares++;
} else if (numero%2!=0 && impares<max) { //so adiciona se numero for impar e ainda nao estiverem todos os impares adicionados
lista.add(numero);
impares++;
}
}
}
for (Integer n : lista) {
System.out.print(n + " ");
}
Existem N maneiras de implementar, segue outro exemplo:
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Exemplo {
public static void main(String[] args) {
Exemplo programa = new Exemplo();
programa.executar();
}
private List<Integer> pares = new ArrayList<>();
private List<Integer> impares = new ArrayList<>();
Exemplo() {
for (int numero = 2; numero <= 20; numero += 2) {
pares.add(numero);
}
for (int numero = 1; numero < 20; numero += 2) {
impares.add(numero);
}
}
public void executar() {
System.out.println("Sorteando 5 numeros pares:");
for (int i = 0; i < 5; i++) {
System.out.println(sortear(pares));
}
System.out.println("Sorteando 5 numeros impares:");
for (int i = 0; i < 5; i++) {
System.out.println(sortear(impares));
}
}
private int sortear(List<Integer> numeros) {
int sorteado = new Random().nextInt(numeros.size());
return numeros.remove(sorteado);
}
}