Imprimir objetos de um ArrayList

Amigos, eu pesquisei e achei vários tópicos mas por algum motivo, eu não consigo com as soluções anteriores, não sei se é por serem antigas ou por eu simplesmente ser leigo.
Tenho um exercício de imprimir entradas do usuário até ele digitar 0 para parar e adiciona-las em um arraylist.
Eis o código de Cliente

public class Cliente {

    private int id;
    private String nome;
    private int idade;
    private String sexo;
    private int telefone;

    public Cliente(){}

    public Cliente(int id, String nome, int idade, String sexo, int telefone) {
        this.id = id;
        this.nome = nome;
        this.idade = idade;
        this.sexo = sexo;
        this.telefone = telefone;
    }

    @Override
    public String toString() {
        return "Cliente{" +
                "id=" + id +
                ", nome='" + nome + '\'' +
                ", idade=" + idade +
                ", sexo='" + sexo + '\'' +
                ", telefone=" + telefone +
                '}';
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

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

    public int getIdade() {
        return idade;
    }

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

    public String getSexo() {
        return sexo;
    }

    public void setSexo(String sexo) {
        this.sexo = sexo;
    }

    public int getTelefone() {
        return telefone;
    }

    public void setTelefone(int telefone) {
        this.telefone = telefone;
    }
}

E aqui a main:

import java.util.ArrayList;
import java.util.Scanner;

public class Principal extends Cliente {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Cliente c = new Cliente();
        ArrayList<Cliente> cliente = new ArrayList<Cliente>();
        boolean running = true;

        while(running){
            System.out.println("Digite seu id: ");
            c.setId(sc.nextInt());
            if(c.getId() == 0){
                System.out.println("Encerrando..");
                running = false;

               for(Cliente cli : cliente){
                   System.out.println(cli.toString());
               }
            }else{
                System.out.println("Digite seu nome: ");
                c.setNome(sc.next());

                System.out.println("Digite sua idade: ");
                c.setIdade(sc.nextInt());

                System.out.println("Digite seu sexo: ");
                c.setSexo(sc.next());

                System.out.println("Digite seu telefone: ");
                c.setTelefone(sc.nextInt());

                cliente.add(c);
            }
       }


    }
}

Tentei mudar esse for each para imprimir c.toString, c.getNome, etc… mas não funcionou.
A ideia é basicamente ir preenchendo os dados do usuário até ele apertar 0. Quando ele aperter 0, o programa deve parar o cadastro e imprimir todos os dados. Mas só está imprimindo o último dado digitado, não sei mais oque fazer.

Brother, aqui nessa linha

Cliente c = new Cliente();

você define um novo objeto e dentro do laço você preenche esse objeto inúmeras vezes sobrescrevendo ele… Ou seja, você está colocando na lista o mesmo objeto toda hora…

Se você fizer assim vai dar certo…

while(running){
            Cliente c = new Cliente(); //adicionei isso dentro do laço pra criar o objeto em toda passagem do laço
            System.out.println("Digite seu id: ");
            c.setId(sc.nextInt());
            if(c.getId() == 0){
                System.out.println("Encerrando..");
                running = false;

               for(Cliente cli : cliente){
                   System.out.println(cli.toString());
               }
            }else{
                System.out.println("Digite seu nome: ");
                c.setNome(sc.next());

                System.out.println("Digite sua idade: ");
                c.setIdade(sc.nextInt());

                System.out.println("Digite seu sexo: ");
                c.setSexo(sc.next());

                System.out.println("Digite seu telefone: ");
                c.setTelefone(sc.nextInt());

                cliente.add(c);
            }
       }
1 curtida

Meu amigo, nem sei como te agradecer. Estava a horas tentando vários métodos e nada funcionava. Meu muito obrigado a você!!