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

Dúvida no Ex. 3 da Aula 6 - Construtores

Estou tendo problemas em declarar a data de entrada depois de fazer as mudanças. Tô meio enferrujado, porque perdi todos os arquivos, e tive que recuperá-los usando os retalhos das respostas. Eu não lembro de tudo, mas pelo que entendi estudando novamente, esse método da resposta não devia ser o suficiente pra inserir a data ao declará-la estilo

Funcionario ford = new Funcionario("Ford Prefect", 60.00);
            ford.setDepartamento("Edição");
            ford.setEntrada(3,8,1978);
            ford.setRG("42424242");

?

Ele dá o erro "actual and formal list differs in lenght". Tentei criar um void preencheData, mas não funcionou, ele não aceitou de mesma forma. Alguém consegue me jogar uma luz ou me colocar no caminho certo? Meus códigos estão assim, de forma resumida:

class Funcionario {
    private String nome;
    private String departamento;
    private double salario;
    private Data entrada = new Data();
    private String RG;

    public Funcionario () {
    }

    public Funcionario(String nome, double salario) {
        this.nome = nome;
        this.salario = salario; 
    //...
        public void setEntrada(Data entrada) {
        entrada = this.entrada;
    }
 class Data {

    int dia;
    int mes;
    int ano;

    public Data(int dia, int mes, int ano) {
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;
        if (! isDataViavel(dia, mes, ano)) {
            System.out.println("A data " + getFormatada() + " não existe!");
        }
    }
    private boolean isDataViavel(int dia, int mes, int ano) {
        if (dia <= 0 || mes <= 0) {
            return false;
        }
        int ultimoDiaDoMes = 31; // por padrao são 31 dias
        if (mes == 4 || mes == 6 || mes == 9 || mes == 11 ) {
            ultimoDiaDoMes = 30;
        } else if (mes == 2) {
            if (ano % 4 == 0) {
                ultimoDiaDoMes = 29;
            } else {
            ultimoDiaDoMes = 28;
            }
        }
        if (dia > ultimoDiaDoMes) {
            return false;
        }
        return true;
    }

    public Data(){
    }

    String getFormatada(){
        return this.dia + "/" + this.mes + "/" + this.ano;
    }
}
Funcionario ford = new Funcionario("Ford Prefect", 60.00);
            ford.setDepartamento("Edição");
            ford.setEntrada(3,8,1978);
            ford.setRG("42424242");
2 respostas
solução!

Na linha:

ford.setEntrada(3,8,1978);

Você não está passando um objeto do tipo Data, mas 3 parâmetros diferentes.

Tente substituir por :

ford.setEntrada(new Data(3,8,1978));

Funcionou, muito obrigado!