O número n representa a quantidade de linhas a
serem impressas. Na seqüência abaixo, n = 7
Ola colega voce pode fazer da seguinte forma:
Scanner scan = new Scanner(System.in);
System.out.println("Informe um numero: ");
int num = scan.nextInt();
int contar = 0;
if (num % 2 != 0) {
for (int i = num; i > 1; i--) {
contar = contar + i;
System.out.println(contar);
}
}else {
System.out.println("Este numero é Par");
}
}
Aqui está um outro exemplo:
import java.util.Scanner;
public class Main {
private static final Scanner scan = new Scanner(System.in);
private static void print(final int n) {
System.out.println("*".repeat(n));
}
private static int getNumber() {
while (true) {
try {
System.out.print("Digite um número ímpar: ");
final int n = Integer.parseInt(scan.nextLine());
if (n % 2 == 1)
return n;
} catch (Exception e) {
System.out.print("Só pode número! ");
}
}
}
public static void main(String... args) {
final int n = getNumber();
for (int i = 1; i < n; i += 2)
print(i);
print(n);
for (int i = n - 2; i > 0; i -= 2)
print(i);
}
}
Se estiver usando uma versão do Java abaixo da 11, troque esta linha:
System.out.println("*".repeat(n));
Por esta:
System.out.println(new String(new byte[n]).replace("\0", "*"));
Depende.
Repare na sequência, ela primeiro imprime 1 asterisco, depois 3, depois 5, depois 7, e em seguida “volta” para 5, 3 e 1.
E se n
for um número par? Se ele for 6, por exemplo, você deve parar no 5 (1, 3, 5, 3, 1), ou deve ir até o 6 (1, 3, 5, 6, 5, 3, 1)? A segunda opção me parece estranha, por “quebrar” a aparente “lógica”, mas vai saber. A questão é que, sem definir bem o problema, será difícil dar uma resposta precisa. Tanto que as respostas acima verificam se o número é par e nesse caso só imprime uma mensagem de erro. É uma solução válida? Pode ser, mas sem a definição precisa do problema, qualquer resposta aqui (inclusive esta) será chute.
Pode parecer que estou sendo “rígido” demais, afinal, “é só um exercício”. Mas a ideia de exercícios é justamente… exercitar não só a programação em si, mas também o raciocínio a ser usado antes, durante e depois de escrever o código (que no fundo, é uma parte importantíssima da programação: pensar em vez de só sair fazendo). É por causa de detalhes assim que muitos problemas aparecem em sistemas reais: você vê um detalhe aparentemente besta, pensa “é óbvio que isso tem que ser assim” e sai fazendo. Se acertar, tudo bem, mas se errar…
Enfim, ignorando o fato do número poder - ou não - ser somente ímpar (que já explicaram como tratar acima), uma outra forma de fazer seria:
int n = // ler o número conforme já explicado pelas outras respostas
int incremento = 2; // incrementa de 2 em 2
for (int i = 1; i >= 1; i += incremento) {
if (i >= n) // se chegou em n, começa a "voltar"
incremento = -2;
// imprime os asteriscos
for (int j = 0; j < i; j++) {
System.out.print("*");
}
// pula a linha
System.out.println();
}
Mas isso considera que n
é ímpar (se ele for 6, ainda sim imprimirá até o 7).
Se a lógica for outra (por exemplo, se só pode ir até 5 quando n
é 6), aí teria que mudar o if
:
int n = // ler o número
boolean par = n % 2 == 0; // verifica se é par
int incremento = 2; // incrementa de 2 em 2
for (int i = 1; i >= 1; i += incremento) {
if (i >= n) { // se chegou em n, começa a "voltar"
incremento = -2;
if (par) { // se n for par
i += incremento; // para não repetir (se n for 6 e não tiver esta linha, imprime 5 asteriscos duas vezes)
continue; // vai para a próxima iteração (sem imprimir os asteriscos)
}
}
// imprime os asteriscos
for (int j = 0; j < i; j++) {
System.out.print("*");
}
// pula a linha
System.out.println();
}
Ou seja, agora se n
for ímpar, funciona da mesma forma (por exemplo, para n = 7
, imprime 1, 3, 5, 7, 5, 3, 1), mas se for par, só vai até o ímpar imediatamente anterior (por exemplo, para n = 6
, imprime 1, 3, 5, 3, 1).
Enfim, defina o que fazer quando o número é par e ajuste a lógica de acordo (a ideia básica do restante permanece a mesma).
O título do tópico diz “ímpar”.
“um número inteiro n ímpar”