Erro Java Null.PointerException

package banco;
import java.util.Scanner;

/**
*

  • @author VINI
    */
    public class Programa {

      public static void main( String[] args) {
     
      int a,i;
     
      Scanner ler=new Scanner(System.in);   
          Cliente cli1[] =  new Cliente[2];
          
      
      cli1[0] = new Cliente();
    

    System.out.println("------MENU------");
    System.out.println(“1-CADASTRAR CLIENTE”);
    System.out.println(“2-CONSULTAR SALDO”);
    System.out.println(“3-REALIZAR DEPOSITO”);
    System.out.println(“4-REALIZAR SAQUE”);
    System.out.println(“5-REALIZAR TRANSFERÊNCIA”);
    System.out.println(“6-SAIR”);
    System.out.printf("INSIRA A OPÇÃO: ");
    a = ler.nextInt();

     switch(a){
          
         case 1: 
         for(i=0;i<3;i++)
         { System.out.printf("Insira o nome: ");
         cli1[i].nome = ler.next(); 
         
         System.out.printf("Insira o endereço: ");
         cli1[i].endereco = ler.next();
         
         System.out.printf("Insira o telefone: ");
         cli1[i].telefone = ler.next();
         
         System.out.printf("Insira o CPF: ");
         cli1[i].cpf = ler.next();
         
         System.out.printf("Insira o ID: ");
         cli1[i].id = ler.next();
         }
         
         
         }
     /*int j;
     for(j=0;j<3;j++)
     {
      System.out.printf("CLIENTES:"+cli1[j].nome);
     }
     */
    

    }
    }

Erro: Código executa na primeio laço exibindo mensagem pra capturar nome, endereço etc… Mas ao iniciar a segunda contagem do laço quando digito o segundo nome do usuário dá esse erro… Exception in thread “main” java.lang.NullPointerException
O código comentado no final é pra após capturar eu ter certeza de que está sendo guardado então irei exibi-lo

o certo é new Cliente[3];

Colocando Cliente[2] o seu array vai de 0 a 1, tendo duas posições, seu laço vai até i<3 ou seja, 0,1 e 2, muda o laço para i<2 ou muda o array para Cliente cli1[] = new Cliente[3];

Fiz as respectivas mudanças mais ainda sim dá o mesmo erro:

public static void main( String[] args) {

     int a,i;
    
     Scanner ler=new Scanner(System.in);   
         Cliente cli1[] =  new Cliente[3];
         
     
     cli1[0] = new Cliente();

Laço: for(i=0;i<2;i++)

cli1[i].nome = ler.next();

Usa nextLine(); para String, nextInt(); pra números e por ai vai, ao invés de apenas next(); ou então usa sempre .nextLine(); e converte a String para o tipo desejado antes de atribuição. Mexer com Scanner é um saco…
Outra coisa, está invocando os atributos diretamente sem os setters?

@Edit, outra coisa, após a instrução do primeiro case, coloca um
break;

Vc criou um array com capacidade para 2 clientes, mas instanciou apenas UM cliente na posição 0. Ou seja, ficou faltando instanciar o outro cliente. Pra ficar certo, teria que fazer assim:

Cliente cli1[] = new Cliente[2];
cli1[0] = new Cliente();
cli1[1] = new Cliente();

Não esqueça, se seu array possui 100 clientes, vc tem que instanciar TODOS os 100 antes de poder usá-los. Afinal, vc só criou um espaço (o array) para colocar clientes, agora precisa preencher estes espaços com clientes de verdade.

Cliente cli1[] = new Cliente[100];
cli1[0] = new Cliente();
cli1[1] = new Cliente();
cli1[2] = new Cliente();
cli1[3] = new Cliente();
/* ... */
cli1[98] = new Cliente();
cli1[99] = new Cliente();

Além das sugestões do @dms775 , sugiro as seguintes modificações em seu código:

  • Exclua a seguinte linha:
cli1[0] = new Cliente();
  • Modifique seu loop for pra ficar assim:
for (int i = 0; i < cli1.length; i++) {
    cli1[i] = new Cliente(); // cria o cliente antes de usá-lo
    
    /* ... */
}