Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Dúvida exercicio 1 aula 7

Eu não consigo achar o que está de errado no meu código!

eu ainda continuo recebendo os números 0,0 a invés de 1,2

class Funcionario{
        private String nome;        
         private int idade;
         private String cargo;
         private double salario;
        private double aumentoSalario;

        private int identificador;
        private static int nFuncionario = 0;




    public Funcionario(String nome){
        this.nome = nome;
        this.identificador = ++nFuncionario;
    }

    public int getIdentificador() {
        return this.identificador;
    }

    public Funcionario(String nome, int idade, String cargo, double salario){
        this.nome = nome;
        this.idade = idade;
        this.cargo = cargo;
        this.salario = salario;
    }

    //retante da classe

    //classe Data

    //classe Empresa


class Registro{
    public static void main(String[] args) {

        Empresa banco = new Empresa("Banco sem Juros!");
        banco.empregados = new Funcionario[3];

        Funcionario matheus = new Funcionario("Matheus de Wit", 26, "Caixa", 1500.0);
        matheus.dataEntrada = new Data();


        banco.adiciona(matheus);

        Funcionario adriano = new Funcionario("Adriano dos Santos", 35, "Gerente", 2000.0);
        adriano.dataEntrada = new Data();


        banco.adiciona(adriano);

        System.out.println(matheus.getIdentificador());
        System.out.println(adriano.getIdentificador());    
    }
}
7 respostas

Boa noite, oque que você esta recebendo? como assim 0,0 ou 1,2?

O Exercício 1 pede o seguinte:

"Adicione um atributo na classe Funcionario de tipo int que se chama identificador. Esse identificador deve ter um valor único para cada instância do tipo Funcionario.

O primeiro Funcionario instanciado tem identificador 1, o segundo 2, e assim por diante."

Então quando eu escrevo meu código, os 2 funcionários estão sendo identificados com o número 0.

eu não sei porque isso acontece!

Eu vou colocar todo o meu código:

class Funcionario{
        private String nome;        
         private int idade;
         private String cargo;
         private double salario;
        Data dataEntrada; // ainda tenho que arruma isso!!!
        private double aumentoSalario;

        private int identificador;
        private static int nFuncionario = 0;

        void mostra(){
        System.out.println("Nome: " + this.getNome());
        System.out.println("Idade: " + this.getIdade());
        System.out.println("Data de entrada: " + this.dataEntrada.getDataEntrada());
        System.out.println("Cargo : " + this.getCargo());
        System.out.println("Salario: " + this.getSalario());
        System.out.println("Salario anual: " + this.getSalarioAnual());        
        System.out.println("\n");
    }


    public Funcionario(String nome){
        this.nome = nome;
        this.identificador = ++nFuncionario;
    }

    public int getIdentificador() {
        return this.identificador;
    }

    public Funcionario(String nome, int idade, String cargo, double salario){
        this.nome = nome;
        this.idade = idade;
        this.cargo = cargo;
        this.salario = salario;
    }

    public String getNome(){
        return this.nome;
    }

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

    public int getIdade(){
        return this.idade;
    }

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

    public String getCargo(){
        return this.cargo;
    }

    public void setCargo(String cargo){
        this.cargo = cargo;
    }

    public void setSalario(double novoSalario){
        this.salario = novoSalario;    
    }

    public double getSalario(){
        return this.salario;
    }

    public double getSalarioAnual(){
        return this.salario * 12;
    }

    public void setAumentoSalario(double quantidade){
        this.salario += quantidade;
    }
}

class Data{
    int dia;
    int mes;
    int ano;

    void preencheData(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }
    public String getDataEntrada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}


class Empresa{
    String nome;
    Funcionario[] empregados;
    int vagas = 0;

    public Empresa(String nome){
        this.nome = nome;
    }

    void adiciona(Funcionario f){
        this.empregados[this.vagas] = f;
        vagas++;
    }

    void mostraTodasAsInformacoes(){
        for(int i = 0; i < this.vagas; i++){
            System.out.println("Funcionario: " + i);
            this.empregados[i].mostra();
        }
    }
}

class Registro{
    public static void main(String[] args) {

        Empresa banco = new Empresa("Banco sem Juros!");
        banco.empregados = new Funcionario[3];

        Funcionario matheus = new Funcionario("Matheus de Wit", 26, "Caixa", 1500.0);
        matheus.dataEntrada = new Data();

        matheus.dataEntrada.preencheData(01, 02 , 2015);
        matheus.setAumentoSalario(500.0);

        banco.adiciona(matheus);

        Funcionario adriano = new Funcionario("Adriano dos Santos", 35, "Gerente", 2000.0);
        adriano.dataEntrada = new Data();

        adriano.dataEntrada.preencheData(02, 04 , 2012);
        adriano.setAumentoSalario(200.0);

        banco.adiciona(adriano);

        System.out.println(matheus.getIdentificador());
        System.out.println(adriano.getIdentificador());    
    }
}

Ah sim... bom oque eu reparei na sua classe Funcionario você criou uma atributo do tipo Integer e antes coloco a palavra reservada do java static correto? tenta tirar o static deixando so o int, Lembrando que para acessar um atributo no seu main de uma variavel static usamos a propria classe e nao o objeto que você criou.

Uma outra analise você não esta usando nenhum "incrementador" e atribuindo o valor em uma variavel no construtor que você acabo de criar, olhando para o seu código, você tem 2 construtor e está usando a segunda opção passando todos os campos desejado. E nesse construtor você ainda não pois a seguinte linha.

 this.identificador = ++nFuncionario;

tenta por e ve se roda, ou tenta mudar o static do seu atributo, acredito que uma das duas opções ira resolver o seu problema

solução!

e uma outra coisa Array e listas sempre começam com o valor 0, então no seu caso deveria ficar 0, 1 kkkk. Deu certo amigo?

Consegui!! Eu mantive o "static " no código "private static int nFuncionario = 0;"

porem tive que colocar o código "this.identificador = ++nFuncionario;" no segundo construtor ficando assim:

public Funcionario(String nome, int idade, String cargo, double salario){
        this.nome = nome;
        this.idade = idade;
        this.cargo = cargo;
        this.salario = salario;
        this.identificador = ++nFuncionario;
    }

Mas será que o código fica com assim dessa forma?

Aaaah sim, eu não preciso de dois construtores. Esse construtor acima já basta.

Obrigado pela ajuda!!!!!!!

Exatamente mano. Se rodou e teve o resultado desejado, tem varias forma de fazer isso no seu programa, uma era criar um metodo statico e depois incrementar a cada vez que um funcionario for instanciado "criado", algo como

public static int quantidadeFuncionario() {
 //como o metodo é statico então só iria "achar atributos static"
return nFuncionario ++;

No seu construtor usado como o seu exemplo é o segundo você chama o metodo dentro dele

public Funcionario(String nome, int idade, String cargo, double salario){
        this.nome = nome;
        this.idade = idade;
        this.cargo = cargo;
        this.salario = salario;
       this.quantidadeFuncionario();
    }

depois era só chamar o metodo dentro do main como exemplo.

System.out.println("Quantidade de funcionario: " + Funcionario.quantidadeFuncionario());

Dessa aqui seria uma outra forma entre as possiveis que tem, mais se o seu código chego ao resultado e ta rodando então perfeito, Só tenta lembrar para pragramar para um manutenção facil do seu programa. abs

No seu caso você não esta usando o outro construtor, então sera só nescessario deixar só oque você esta usando, não faz muito sentido deixar um comando de linhas de código no seu programa onde não esta sendo util para você, tente criar apenas oque ira usar. Porem tem casos onde você ira precisar de mais de 1 construtores mais quando você precisar você cria. Bons estudos

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software