Criando um objeto de um vetor

Galera sou mais um iniciante na linguagem não consigo ver por que o codigo abaixo nao funciona:

public static void main(String[] args) {
        Scanner Entrada = new Scanner(System.in);
     
        cliente p[] = new cliente[2];
        for (int i=0;i<=3;i++){
        
        //cliente p;
        //p = new cliente();
       System.out.println("Digite o Id");
        //var = Entrada.nextInt();
      
      p[i].setId(Entrada.nextInt());
       
      // System.out.println("Qual o email?");
       // p.setEmail(Entrada.nextLine());
   // i++;
        }
    
        System.out.println("ID->:"+p[i].getId());
    }
    }

Quando você criar o vetor assim:
cliente p[] = new cliente[2];
Você está apenas criando um espaço em memória para ele. Após isso você precisa iniciar o vetor com objetos:
Pode ser feito dentro do seu for

for (int i=0;i<=3;i++){ p[i] = new cliente(); System.out.println("Digite o Id"); p[i].setId(Entrada.nextInt()); }
Agora eu acho que funciona

Por dois motivos:

  1. Você fez o vetor com 2 elementos, mas está fazendo o for do índice 0 até o 3, o que são 4 elementos.
    Troque o <= por <.
    Ou, melhor ainda, troque também o 3 pelo atributo length:

  2. Você está tentando usar os clientes, sem tê-los criado. Criar um vetor não cria automaticamente os objetos dentro dele. O new era mesmo necessário.

[code]public static void main(String[] args) {
Scanner Entrada = new Scanner(System.in);
cliente p[] = new cliente[2];
for (int i=0;i< p.length;i++){
cliente p = new cliente();
System.out.println("Digite o Id");
p[i].setId(Integer.parseInt(Entrada.nextLine()));

    System.out.println(&quot;Qual o email?&quot;);
   p.setEmail(Entrada.nextLine());
}

}[/code]

Finalmente, respeite as convenções de código. Classes tem o nome começado com letra maiúscula (Cliente) e variáveis tem o nome começado por letra minúscula (entrada).

Obrigado, estou começando a compreender, porém agora não consigo pegar os dados do cliente, não da opcao ele executa o System.out.pintln(“Qual o email”), mas não da opção para eu digitar.

Ficou assim


public static void main(String[] args) {
        Scanner Entrada = new Scanner(System.in);
        for (int i=0;i<=3;i++){
        cliente p = new cliente();
        System.out.println("Digite o Id");
        p.setId(Entrada.nextInt());
        System.out.println("Qual o email?");
        p.setEmail(Entrada.nextLine());
                }

Testei aqui e funcionou.
Vc esta teclando enter depois que digita o Id?

Sim…digito o id, Enter, ele mostra a mensagem do email, ja seguido da mensagem pra digitar o id novamente…não deixa digitar o email…

veja como fica: http://guto.syscore.com.br/blog/wp-content/uploads/ERRO.jpg

se usar next() no lugar de nextLine()?

furutani
Agora sim, funcionou! com p.setEmail(Entrada.next());
Ja vou pesquisar aqui pra entender a diferença. Valew Cara!

Você usou apenas com nextLine() que nem eu fiz ali em cima? O único método que deveria ser usado com Scanner para ler do console é o nextLine().
O seu problema me parece ser pq vc usava o nextInt().