Código roda, porém não como o esperado

package Exercicio21;

import java.util.Scanner;

public class App {
    public static void main(String[] args) {
    
       String nome,sexo,saude,R,B;
       Short homem=0,mulher=0;
       int total,num, idade,totApto=0,totInaptos=0;
       
       Scanner leitor = new  Scanner (System.in);
       
       for(int i=0; i<5; i++){
       System.out.println("Digite o seu nome: "); 
       nome=leitor.nextLine();    
   
       System.out.println("Digite o sexo (M/F): "); 
       sexo=leitor.nextLine();
       if (sexo.equals("M")||sexo.equals("m")){
       homem++;
       }else if (sexo.equals("F")||sexo.equals("f")){
       mulher++;
       }
       System.out.println("Digite o estado de saude B (Boa) ou R (Ruim): "); 
       saude =leitor.next();
       if (saude.equals("B")||saude.equals("b"))
           
       {
       System.out.println(" Apto para o alistamento!");
     
       }else if(saude.equals("R")||saude.equals("r")){
       System.out.println(" Não está apto para o alistamento!");
       }
       {
       System.out.println("Digite a idade: "); 
       idade=leitor.nextInt(); 
   
       if(idade>=18 && idade<=45){
       System.out.println("Idade disponivel para alistamento! ");
       idade=leitor.nextInt();
       }else{ System.out.println("Idade não disponivel para o alistamento!");
       idade=leitor.nextInt();
       }
       }
       }
       totApto=totApto+1;
       totInaptos=totInaptos+1; 
       total=totApto+totInaptos;
       
       System.out.println("Foram filtrados"+total+ "pessoas!"); 
       System.out.println("O total de aptos para o Serviço Militar"+totApto+ "!"); 
       System.out.println("O total de Inaptos para o Serviço Militar"+totInaptos+ "!");
    }
}

O que tá acontecendo? E qual é o resultado esperado??

Isso é Java e não javascript.

Ele roda o programa só uma vez, e não 5 como pedido na função.

Nessa parte.

Apague esses dois idade=leitor.nextInt();

if(idade>=18 && idade<=45){
    System.out.println("Idade disponivel para alistamento! ");
}else{
    System.out.println("Idade não disponivel para o alistamento!");
}

O que está acontecendo ele espera que o usuário digite a idade denovo.

Porém, seu código ficou com aquele bugzinho de quando se usa o mesmo Scanner pra pegar int e depois String

1 curtida

Saquei, vlw :wink:

Isso não é bug, é comportamento esperado.
O único método do Scanner que consome a quebra de linha gerada ao pressionar o enter, é o nextLine().
Então o mais adequado é, quando usar o Scanner para ler o System.in, usar somente o método nextLine().