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

O vetor não mostra o outro funcionario, somente o primeiro, tanto na posição 0 quanto na posição 1. O que pode estar acontecendo?


class Funcionario {
    String nome;
    String departamento;
    double salario;
    String data;
    String rg;
    Data   dataInicio;


    void recebeAumento (double valor) {
        this.salario += valor;
    }

    double calculaGanhoAnual () {
        return salario * 12;
    }


    void mostra() {
    System.out.println("Nome: " + this.nome);
    System.out.println("Departamento: " + this.departamento);
    System.out.println("Salario: " + this.salario);
    System.out.println("RG: " + this.rg);
    System.out.println("Calculo anual: " + this.calculaGanhoAnual());
    System.out.println("Data de Início: " + this.dataInicio.getFormatada());

}
}

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

    void modeloData (int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada () {
        return this.dia + "/" + this.mes + "/" + this.ano;

    }
}

class Empresa {
    String nome;
    String cnpj;
    Funcionario empregados[]; 

    void adiciona (Funcionario f) {
        for (int i=0; i < empregados.length; i++) {
            if (empregados[i] == null) {
                this.empregados[i] = f;
            }else{
                continue;
            }
        }
    }




}


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

        Empresa sac = new Empresa();
        sac.empregados = new Funcionario[2];


        Funcionario f1 = new Funcionario();
        f1.nome = "Taina Moreira Lima";
        f1.departamento= "Setor de TI";
        f1.salario=2000;
        f1.rg = "10124833.47";
        f1.dataInicio = new Data();
        f1.dataInicio.modeloData(1,1,2014);


        sac.adiciona(f1);



        Funcionario f2 = new Funcionario();
        f2.nome = "Deborah Moreira Simões";
        f2.departamento= "Setor Financeiro";
        f2.salario=3000;
        f2.rg = "226988095.15";
        f2.dataInicio = new Data();
        f2.dataInicio.modeloData(1,1,2014);


        sac.adiciona(f2);


        sac.empregados[0].mostra();



    }
}
3 respostas
class Funcionario {
    String nome;
    String departamento;
    double salario;
    String data;
    String rg;
    Data   dataInicio;


    void recebeAumento (double valor) {
        this.salario += valor;
    }

    double calculaGanhoAnual () {
        return salario * 12;
    }


    void mostra() {
    System.out.println("Nome: " + this.nome);
    System.out.println("Departamento: " + this.departamento);
    System.out.println("Salario: " + this.salario);
    System.out.println("RG: " + this.rg);
    System.out.println("Calculo anual: " + this.calculaGanhoAnual());
    System.out.println("Data de Início: " + this.dataInicio.getFormatada());

}
}

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

    void modeloData (int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
    }

    String getFormatada () {
        return this.dia + "/" + this.mes + "/" + this.ano;

    }
}

class Empresa {
    String nome;
    String cnpj;
    Funcionario empregados[]; 
    int posicao=0;
    void adiciona (Funcionario f) {
       this.empregados[posicao]=f;

        posicao++;
        }
    }







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

        Empresa sac = new Empresa();
        sac.empregados = new Funcionario[2];


        Funcionario f1 = new Funcionario();
        f1.nome = "Taina Moreira Lima";
        f1.departamento= "Setor de TI";
        f1.salario=2000;
        f1.rg = "10124833.47";
        f1.dataInicio = new Data();
        f1.dataInicio.modeloData(1,1,2014);


        sac.adiciona(f1);



        Funcionario f2 = new Funcionario();
        f2.nome = "Deborah Moreira Simões";
        f2.departamento= "Setor Financeiro";
        f2.salario=3000;
        f2.rg = "226988095.15";
        f2.dataInicio = new Data();
        f2.dataInicio.modeloData(1,1,2014);


        sac.adiciona(f2);


        sac.empregados[1].mostra();



    }
}

o seu for está errado.. voce adiciona o mesmo objeto varias vezes ai quando ele testa novamente ele não aidicona porque não e null... teste com o codigo que eu refiz ai

solução!

Olá Taina! É como o João disse, seu for() está com um pequeno problema. Perceba que ele adiciona um funcionário quando o item da array estiver vazio, logo igual a null.

So que veja que no inicio, todos os campos da sua array estão iguais a null, porque não tem nenhum funcionário adicionado, logo quando você chama o método adiciona, ele percorre toda sua array e como todos estão iguais a null ele adiciona o mesmo funcionário varias vezes.

Quando você tenta adicionar um segundo funcionário, ele não adiciona porque a condição não é mais atendida, todos os campos da array estão preenchidos, nenhum é igual a null mais, assim ele não adiciona o outro funcionário.

Você pode mudar a sua função e deixar como o João fez, porém acho meio desnecessário ter que criar um atributo na classe apenas para armazenar o valor que indica o próximo index que será adicionado um novo funcionário. Fora que prejudica um pouco a semântica do código. Porque um objeto do tipo Empresa teria uma característica chamada posição? Meio sem sentido, concorda não?

Então uma forma de consertar o problema é simplesmente, fazendo o loop parar assim que um funcionario for adicionado. Pois um funcionário só precisa ser adicionado em uma posição, depois de ele ser adicionado, também não é necessário continuar percorrendo a Array.

Assim, basta adicionar um break para que o loop pare ao adicionar o funcionário, adicionando apenas uma linha a mais em seu método:

void adiciona (Funcionario f) {
        for (int i=0; i < empregados.length; i++) {
            if (empregados[i] == null) {
                this.empregados[i] = f;
                break;
            }else{
                continue;
            }
        }
    }

Espero ter ajudado! Bons Estudos!

deu certo! obrigada! :)

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