Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Array] Incluir dependentes abaixo de idade limite

Prezados, boa noite. Estou com um problema e não consigo ver onde está o erro! Trata-se de um código em Java que deverá imprimir: (a) Funcionários Temporários/Concursados; (b) código do funcionário; (c) anos/meses de contratação; (d) salário acrescido de bonificação por tempo de serviço (anos para Concursado e meses para Temporário) e acrescido também de um adicional por dependente (100 reais para Concursado e 50 reais para Temporário).

insira seu código aqui
import java.util.ArrayList;

public class Funcionario {

    public String codigoFuncionario;
    public double salarioFuncionario;

    public ArrayList<Dependente> dependentes = new ArrayList<Dependente>();

    public boolean associaDependente(Dependente d) {
        if (dependentes.size() > 5) {
            System.out.println("Há um limite de 05 dependentes por funcionário");
            return false;
        } else {
            dependentes.add(d);
        }
        return true;
    }

    public int obtemQuantidadeDependentesNaIdadeLimite(int idadeDependente) {

        int totalIdade = 0;

        for (Dependente d : this.dependentes) {
            if (totalIdade < idadeDependente) {
                totalIdade++;

            }
        }
        return totalIdade;
    }
}


public class FuncionarioConcursado extends Funcionario {

    public int anosContratacao;

    public FuncionarioConcursado(String codigoFuncionario, double salarioFuncionario, int anosContratacao) {

        this.codigoFuncionario = codigoFuncionario;
        this.salarioFuncionario = salarioFuncionario;
        this.anosContratacao = anosContratacao;
    }

    public double calculaSalario() {

        return this.salarioFuncionario
                + (this.anosContratacao * 200.0 + this.obtemQuantidadeDependentesNaIdadeLimite(21) * 100.0);

    }

    public void imprime() {
        System.out.println("FUNCIONÁRIO CONCURSADO");
        System.out.println("Código do funcionário: " + this.codigoFuncionario);
        System.out.println("Anos contratação: " + this.anosContratacao);
        int somaDependentes = 0;
        for (int i = 0; i < this.dependentes.size(); i++) {
            if (this.dependentes.get(i) .estaNaIdadeLimite(21) == true) {
                somaDependentes ++;
            }

        }

        System.out.println("Dependentes dentro da idade limite: " + this.obtemQuantidadeDependentesNaIdadeLimite(21));
        System.out.println("Salário total: " + calculaSalario());

    }
}


public class Dependente {

    public int idadeDependente;

    public boolean estaNaIdadeLimite(int idade) {

        if (this.idadeDependente == idade) {
            return true;
        } else {
            return false;
        }
    }
}

O grande "x" da questão é que podem ser cadastrados o limite de 5 dependentes para cada funcionário (cada dependente gera um acréscimo de bonificação caso seja menor que 21 anos para Concursado e menor que 18 anos para Temporário). O problema n. 1 é que, por exemplo, se eu cadastro 6 dependentes ele só gera o erro de "excedeu dependente" antes de imprimir. O problema n. 2 é que ele está incluindo dependentes de idades que excedem 18/21 anos (mas não todos), ele insere alguns até a idade limite e acaba acrescentando outros que excedem essa idade. A classe FuncionarioTemporario é igual a classe FuncionarioConcursado, mudando apenas os valores.

1 resposta
solução!

O main está assim:

import java.util.ArrayList;
import java.util.Scanner;

public class FolhaPagamento {

    public static ArrayList<FuncionarioConcursado> funcionariosConcursados;
    public static ArrayList<FuncionarioTemporario> funcionariosTemporarios;

    public static void main(String[] args) {

        Scanner teclado = new Scanner(System.in);

        System.out.println("Informe a quantidade de funcionários: ");
        int quantidadeDeFuncionarios = teclado.nextInt();
        teclado.nextLine();

        funcionariosConcursados = new ArrayList<FuncionarioConcursado>();
        funcionariosTemporarios = new ArrayList<FuncionarioTemporario>();

        int contador = 0;

        while (contador < quantidadeDeFuncionarios) {

            System.out.println("Informe o tipo de funcionário: [1 = Concursado / 2 = Temporário] ");
            int tipoDeFuncionario = teclado.nextInt();
            teclado.nextLine();

            System.out.println("Funcionário " + contador);

            System.out.println("Informe o código do funcionário");
            String codigoFuncionario = teclado.nextLine();

            System.out.println("Informe o salário do funcionário: ");
            int salarioFuncionario = teclado.nextInt();
            teclado.nextLine();

            System.out.println("Quantos dependentes você deseja associar a este funcionário? ");
            int quantidadeDeDependentes = teclado.nextInt();
            teclado.nextLine();

            ArrayList<Dependente> dependentes = new ArrayList<Dependente>();

            int contadorDeDependentes = 0;

            while (contadorDeDependentes < quantidadeDeDependentes) {

                System.out.println("Dependente " + contadorDeDependentes);

                System.out.println("Informe a idade do dependente: ");
                int idade = teclado.nextInt();
                teclado.nextLine();

                Dependente d = new Dependente(); // no exemplo teria que colocar idade dentro dos parenteses.

                dependentes.add(d);

                contadorDeDependentes++;
            }

            if (tipoDeFuncionario == 1) {

                System.out.println("Informe quantos anos o funcionário trabalha: ");
                int anosContratacao = teclado.nextInt();
                teclado.nextLine();

                FuncionarioConcursado funcionario = new FuncionarioConcursado(codigoFuncionario, salarioFuncionario,
                        anosContratacao); // talvez aqui ta errado

                for (Dependente d : dependentes) {
                    funcionario.associaDependente(d);

                }

                funcionariosConcursados.add(funcionario);

            } else {

                System.out.println("Informe quantos meses o funcionário trabalha: ");
                int mesesContratacao = teclado.nextInt();
                teclado.nextLine();

                FuncionarioTemporario funcionario = new FuncionarioTemporario(codigoFuncionario, salarioFuncionario,
                        mesesContratacao); // talvez aqui ta errado

                for (Dependente d : dependentes) {
                    funcionario.associaDependente(d);
                }

                funcionariosTemporarios.add(funcionario);

            }

            contador++;

        }

        for (FuncionarioConcursado funcionario : funcionariosConcursados) {
            funcionario.imprime();
        }

        for (FuncionarioTemporario funcionario : funcionariosTemporarios) {
            funcionario.imprime();
        }
    }
}