Boa tarde pessoal. Sou novo em programação, e comecei com java. Estou resolvnedo algumas listas, e surgiram alguns problemas que não ocnsegui entender.
“Faça um programa que leia um número inteiro N e depois imprima os N primeiros números naturais impares”. Agradeço a quem ajudar
Posta o código e explica o que você não entendeu.
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Teste {
public void pegarImpares(Integer...n){
List<Integer>numeros=new ArrayList<Integer>(Arrays.asList(n));
Collections.sort(numeros);
for(Integer m:numeros){
if(m%2==1) {
System.out.print(" "+m);
}
}
}
public static void main(String[] args) {
new Teste().pegarImpares(1,4,3,2,6,9);
}
}
Esses números, 1,2,4,5… é só de exemplo, se estiver com dúvidas no código ou qualquer erro avise
O código funciona. Não está elegante nem simples, mas funciona.
Qual a sua dúvida?
Meu objetivo era fazer em poucas linhas
O código já está curto, o que mais você quer?
Código menor não é necessariamente “melhor”. Eu acho melhor perseguir um código claro, que faça o que você precisa sem firulas, e que fique fácil de entender e manter/modificar. Se vai ficar “com menos linhas” ou não, é circunstancial, mas isso não deve ser um fim por si só. Muitas vezes você acaba forçando a barra só para o código ficar menor, e acaba ficando pior e desnecessariamente mais confuso.
Dito isso, se os números não precisam estar em ordem crescente, não precisaria chamar sort. Mas se precisam estar em ordem, não precisaria criar um List, bastaria usar java.util.Arrays:
public void pegarImpares(int... numeros) {
Arrays.sort(numeros);
for (int n : numeros) {
if (n % 2 == 1) {
System.out.print(" " + n);
}
}
}
Também mudei o tipo de Integer para int, pois não tem motivo para usar os wrappers. Ao fazer operações matemáticas com Integer, é feito o unboxing automático para int, que apesar de ser “rápido”, tem lá o seu custo (claro que para poucos números a diferença será insignificante, mas a menos que haja algum motivo para usar Integer, eu usaria int mesmo que parece ser o suficiente).
Claro que se não precisar que os números estejam em ordem, tire a chamada de Arrays.sort.
Um detalhe importante é que Arrays.sort modifica o próprio array, o que pode ou não ser desejado, dependendo do caso:
int[] numeros = { 1, 4, 3, 2, 6, 9 };
new Teste().pegarImpares(numeros); // 1 3 9
System.out.println(Arrays.toString(numeros)); // [1, 2, 3, 4, 6, 9]
Veja que o array numeros é modificado. Se não quer que ele seja modificado, aí faria sentido criar o List antes de ordenar.
Agora considerando o enunciado do exercício: “Faça um programa que leia um número inteiro N e depois imprima os N primeiros números naturais ímpares”.
Para ler o número, é simples:
Scanner scanner = new Scanner(System.in);
System.out.println("digite um número");
int n = scanner.nextInt();
E uma vez tendo o n, para imprimir os N primeiros números ímpares, basta começar do 1 e ir até 2N, pulando de 2 em 2:
for (int i = 1; i < 2 * n; i += 2) {
System.out.println(i);
}
Ou, faça o for de 0 a n - 1, e considere que o n-ésimo número ímpar é 2N + 1:
for (int i = 0; i < n; i++) {
System.out.println(2 * i + 1);
}