Erro: Exception in thread "main" java.lang.NullPointerException

Olá, sou iniciante e estou começando a aprender aprender programação orientada a objeto em java. Na apostila da Caelum é proposto um exercicio de criar uma conta de banco por meio de classes, mas decidir ir um pouco além tentando fazer um código que leia as informações do usuário. O código deve estar bem “feio”, então já peço desculpas logo de cara :smile:

    package estudandoclasses;

import java.util.Scanner;
import java.util.Random;
    
class Conta {
    //ATRIBUTOS
    Cliente titular;
    int numero;
    double saldo;
    double salario;
    
    
    //METODOS:
    
    void depositar (double quantidade) {
        saldo += quantidade;
        System.out.println("Deposito feito com sucesso");
    }
    
    String sacar (double quantidade) {
        if (saldo >= quantidade) {
            saldo -= quantidade;
            return "Saque feito com sucesso!";
        } else {
            return "Não foi possível realizar o saque.";
        }
    }
        
        void consultarSaldo () {
            System.out.println(saldo);
    }
        
        String transferir (Conta destino, double quantidade) {
            if (saldo >= quantidade) {
                this.saldo -= quantidade;
                destino.saldo += quantidade;
                return "Transferência executada com sucesso!";
            } else {
                return "Não foi possível executar a transferência";
            }
            
        }
        
        void chegouSalario () {
            saldo += salario;
        }
        
    }
    

class Cliente {
    String nome;
    String sobrenome;
    int idade;
    int cpf;
    Endereco lugar;
}

class Endereco {
    // ??int cep;??
    String estado;
    String cidade;
    String bairro;
    String rua;
    String complemento;
}
    
class EstudandoClasses {

    public static void main(String[] args) {
        Conta minhaConta = new Conta();
        Conta testeConta = new Conta();
        Conta criarConta = new Conta();
        
        Scanner sc = new Scanner(System.in);
        Random sort = new Random();
        
        System.out.println("Você quer criar uma conta? Digite: 1 para SIM, 2 para NÃO.");
        int escolha = sc.nextInt();
        if (escolha == 1) {
            //TITULAR
            System.out.println("Qual seu primeiro nome?");
            criarConta.titular.nome = sc.nextLine();
            System.out.println("Qual seu sobrenome?");
            criarConta.titular.sobrenome = sc.nextLine();
            System.out.println("Qual sua idade?");
            criarConta.titular.idade = sc.nextInt();
            System.out.println("Qual seu CPF?");
            criarConta.titular.cpf = sc.nextInt();
            //ENDEREÇO
            System.out.println("Qual é seu estado?");
            criarConta.titular.lugar.estado = sc.nextLine();
            System.out.println("Qual é sua cidade?");
            criarConta.titular.lugar.cidade = sc.nextLine();
            System.out.println("Qual é o seu bairro?");
            criarConta.titular.lugar.bairro = sc.nextLine();
            System.out.println("Qual é a sua rua?");
            criarConta.titular.lugar.rua = sc.nextLine();
            System.out.println("Qual o complemento?");
            criarConta.titular.lugar.estado = sc.nextLine();
            //NUMERO
            criarConta.numero = (sort.nextInt(1000) / 1000) * sort.nextInt(1000) + 1;
            //PRINT
            System.out.println(criarConta);
        } else {
            System.exit(0);
        }
        
        
               }

}

A NullPointerException ocorre quando você tenta acessar uma propriedade ou método de uma referência nula.

Na mensagem de erro deve ter a linha onde a exceção está ocorrendo. Veja o que está acontecendo nessa linha e tente descobrir se aquela variável está sendo inicializada corretamente. A forma mais fácil de ver isso acontecer é debugar o programa na IDE que você está utilizando.

1 curtida

Você esqueceu de inicializar o titular

1 curtida

Como a classe Cliente está associada a classe Conta, é interessante instanciar um objeto cliente no construtor da classe Conta.
Assim, sempre que um objeto Conta for criado, um cliente já estará instanciado.

Quer aprender mais sobre programação acesse o meu canal SiAbreu Tec.