Como percorrer as linhas do ArrayList

Boa tarde, queria uma ajuda de como posso fazer para percorrer linha por linha de um ArrayList, preciso dizer o nome e a idade de jogadores, e preciso da idade deles para saber a categoria.

Bloco de Citação

import java.util.ArrayList;
import java.util.Scanner;
public class Jogador {
Scanner teclado = new Scanner(System.in);
ArrayList jogador = new ArrayList();

public void addJogador(){
    String opc = "S";  
    do{  
        System.out.println("Informe o Nome e a Idade do Jogador");
        jogador.add(teclado.nextLine());
   
        System.out.println("Deseja adicionar mais Jogadores? [S/N]");
        opc = teclado.nextLine();
    }while (opc.equals("S")); 
}

public void listar(){
    System.out.println("=== LISTA DE JOGADORES ===");
    for(int i=0; i<jogador.size() ;i++){
        System.out.println("Posição "+i+ " - " +jogador.get(i));
    }   
}

public String getCategoria(String n){
    if(jogador == "9"){
        return "Infantil";
    }
    else if(jogador == "14"){
        return "Infanto-Juvenil";
    }
    else if(jogador == "17"){
        return "Juvenil";
    }
    else if(jogador == "21"){
        return "Sub-21";
    }
    else if(jogador > "21"){
        return "Profissional";
    }
    else{
        return "Categoria não existe";
    }
    }

}

Não misture as interações da interface de usuário dentro das classes do modelo do problema.

Exemplo de solução:

Classe Jogador:

import java.util.ArrayList;
import java.util.List;

public class Jogador {

    private static List<Jogador> jogadores = new ArrayList<>();

    public static List<Jogador> listar() {
        return jogadores;
    }

    private String nome;
    private int idade;

    public String getCategoria() {
        if (idade > 21) {
            return "Profissional";
        }
        switch (idade) {
            case 9:
                return "Infantil";
            case 14:
                return "Infanto-Juvenil";
            case 17:
                return "Juvenil";
            case 21:
                return "Sub-21";
            default:
                return "Categoria não existe";
        }
    }

    public int getIdade() {
        return idade;
    }

    public String getNome() {
        return nome;
    }

    public void salvar() {
        jogadores.add(this);
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }
}

Classe que executa o programa em si:

import java.io.PrintStream;
import java.util.List;
import java.util.Scanner;

public class Programa {

    public static void main(String[] args) {
        Programa programa = new Programa();
        programa.cadastrarJogadores();
        programa.listarJogadores();
    }

    private final Scanner entrada = new Scanner(System.in);
    private final PrintStream saida = System.out;

    public void cadastrarJogadores() {
        String opcao = null;
        do {
            saida.println("Informe os dados Jogador");
            saida.print("  Nome: ");
            String nome = entrada.nextLine();

            saida.print("  Idade: ");
            int idade = Integer.parseInt(entrada.nextLine());

            Jogador jogador = new Jogador();
            jogador.setNome(nome);
            jogador.setIdade(idade);
            jogador.salvar();

            saida.println("Deseja adicionar mais Jogadores? [S/N]");
            opcao = entrada.nextLine();
        } while ("S".equalsIgnoreCase(opcao));
    }

    public void listarJogadores() {
        saida.println("=== LISTA DE JOGADORES ===");
        List<Jogador> jogadores = Jogador.listar();
        for (int i = 0; i < jogadores.size(); i++) {
            Jogador jogador = jogadores.get(i);
            saida.println("Posição " + i + " - " + jogador.getNome() + " " + jogador.getIdade() + " anos");
        }
    }
}