java.lang.NullPointerException error using Scanner

0

In the following code generates the following error:

Exception in thread "main" java.lang.NullPointerException
    at pkgClientesPedidosDiogoVinicius.TesteClientesPedidos.cadastrarGerente(TesteClientesPedidos.java:98)
>>>>    g1.setTaxaVenda(taxaVenda);      
    at pkgClientesPedidosDiogoVinicius.TesteClientesPedidos.menu(TesteClientesPedidos.java:47)
>>>> cadastrarGerente();
    at pkgClientesPedidosDiogoVinicius.TesteClientesPedidos.main(TesteClientesPedidos.java:17)
>>>     menu();

My class:

/*
 * PROGRAMA CLIENTES E PEDIDOS
 * DATA: MAIO/JUNHO DE 2017
 * 
 * 
 */

package pkgClientesPedidos;

import java.util.Scanner;

public class TesteClientesPedidos {
    static Gerente g1;

    public static void main(String[] args) {
        menu();

    }

    static void menu() {
        Scanner leitura = new Scanner(System.in);
        int opcao;

        do {
            System.out.println("PROGRAMA CLIENTES/PEDIDOS - OPÇÕES\n");
            System.out.println("----------------------------------\n");
            System.out.println("1  - Cadastrar Gerente\n");
            System.out.println("2  - Cadastrar Vendedor\n");
            System.out.println("3  - Cadastrar Técnico\n");
            System.out.println("4  - Mostrar dados dos funcionarios(Gerente/Vendedor/Técnico\n");
            System.out.println("5  - Cadastrar Item de Pedido\n");
            System.out.println("6  - Cadastrar Pedido\n");
            System.out.println("7  - Mostrar Dados de Pedido e Item de Pedido\n");
            System.out.println("8  - Cadastrar Gerente Administrativo\n");
            System.out.println("9  - Cadastrar Gerente Financeiro\n");
            System.out.println("10 - Mostrar dados de Gerente Administrativo e Financeiro\n");
            System.out.println("11 - Mostrar cálculo do salário para cada funcionario (Gerente/Vendedor/Técnico\n");
            System.out.println("12 - Sobre\n");
            System.out.println("13 - Encerrar programa\n");

            System.out.println("Informe a opção:\n");
            opcao = leitura.nextInt();

            switch (opcao) {
            case 1:
                cadastrarGerente();
                break;
            case 13:
                System.out.println(">>PROGRAMA FINALIZADO");
                break;
            }

        } while (opcao != 13);
        leitura.close();
    }

    public static void cadastrarGerente() {
        String nome;
        int matricula;
        String telefone;
        String email;
        String cidade;
        String estado;
        String salario;
        double taxaVenda;

        Scanner entrada = new Scanner(System.in);

        System.out.println("CADASTRAR GERENTE\n");
        System.out.print("Nome:........:");
        nome = entrada.nextLine();

        System.out.println("Matricula:...:");
        matricula = entrada.nextInt();

        System.out.println("Telefone:....:");
        telefone = entrada.next();

        System.out.println("Cidade:......:");
        cidade = entrada.nextLine();
        entrada.nextLine();

        System.out.println("E-mail:......:");
        email = entrada.nextLine();

        System.out.println("Salário:.....:");
        salario = entrada.nextLine();
        Double.parseDouble(salario);

        System.out.println("Estado:......:");
        estado = entrada.nextLine();

        try {
            System.out.println("Taxa Venda:..:");
            taxaVenda = entrada.nextDouble();
            g1.setTaxaVenda(taxaVenda);

        } catch (IllegalArgumentException e) {
            System.out.println(e.getMessage());
        }

        entrada.close();
        g1 = new Gerente(nome, matricula, telefone, email, cidade, estado, Double.parseDouble(salario));

    }

}
    
asked by anonymous 01.06.2017 / 03:05

1 answer

0

You're doing it like this:

try {
    System.out.println("Taxa Venda:..:");
    taxaVenda = entrada.nextDouble();
    g1.setTaxaVenda(taxaVenda);
} catch (IllegalArgumentException e) {
    System.out.println(e.getMessage());
}

entrada.close();
g1 = new Gerente(nome, matricula, telefone, email, cidade, estado, Double.parseDouble(salario));

When trying to call the setTaxaVenda(taxaVenda) method, you get NullPointerException because the value of g1 is null .

Note that only on the last line you initialize the variable: g1 = new Gerente(nome, matricula, telefone, email, cidade, estado, Double.parseDouble(salario));

Call the setTaxaVenda(taxaVenda) method after initializing the variable:

try {
    System.out.println("Taxa Venda:..:");
    taxaVenda = entrada.nextDouble();
} catch (IllegalArgumentException e) {
    System.out.println(e.getMessage());
}

entrada.close();
g1 = new Gerente(nome, matricula, telefone, email, cidade, estado, Double.parseDouble(salario));
g1.setTaxaVenda(taxaVenda);
    
02.06.2017 / 20:04