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

Problema ao atribuir data

Boa noite pessoal, sou novo por aqui :)

Estou com dificuldade em tocar meu código para que continue funcionando. Não consegui fazer o desafio da data, na verdade não tentei muito, mas entendi o seu funcionamento. Contudo, ao adaptar o código, não consigo fazê-lo funcionar:

public class Data {
    private int dia;
    private int mes;
    private 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!");
        }
    }

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

    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) {
            ultimoDiaDoMes = 28;
            if((ano % 400 == 0) || ((ano % 4 == 0) && (ano % 100 != 0))){
                ultimoDiaDoMes = 29;
            }
        }
        if (dia > ultimoDiaDoMes) {
            return false;
        }

        return true;
    }
}
class TestaEmpresa{

    public static void main (String[] args){

        Empresa empresa = new Empresa();
        empresa.funcionarios = new Funcionario[10];

        Funcionario f1 = new Funcionario("João");

        f1.setDepartamento("Desenvolvimento");
        f1.setRg("48.816.109-5");
        f1.setSalario(7000);
        f1.setAumento(500);

        Data d1 = new Data(5,3,2018);
        f1.setDataEntrada(d1.getFormatada());
        empresa.adiciona(f1);

        Funcionario f2 = new Funcionario();

        f2.setNome("Manoel");
        f2.setDepartamento("Desenvolvimento Web");
        f2.setRg("49.816.109-5");
        f2.setSalario(3000);
        f2.setAumento(500);

        Data d2 = new Data(5,4,2018);
        f2.setDataEntrada(d2.getFormatada());   
        empresa.adiciona(f2);

        empresa.mostraTodasAsInformacoes(); 
        empresa.contem(f1);
        empresa.contem(f2); 

    }

}

Ao rodar o teste, apresenta o seguinte erro:

TestaEmpresa.java:17: error: incompatible types: String cannot be converted to Data f1.setDataEntrada(d1.getFormatada());

Como faço para atribuir a data nesse caso? Precisarei modificar o formato?

Class Funcionario {
    /....
    private Data dataEntrada;
    ....

            public Data getDataEntrada() {
          return this.dataEntrada;
        }

        public Data setDataEntrada(Data dataEntrada) {
          return this.dataEntrada = dataEntrada;
        }

....

}

Vlw!

1 resposta
solução!

Oi Michel!

O problema nesse caso é que d1.getFormatada() retorna um objeto String.

Na classe funcionário, a dataEntrada é um objeto Data. Assim, você deve passar um objeto Data no set também.

Você poderia, por exemplo criar um método que quebra a sua data formata (uma String), em ano, mes, dia. Com isso você poderia ser algo tipo:

Data objetoData = converterDeStringParaData(d1.getFormatada);
f1.setDataEntrada(objetoData);

No método, teria uma parte com algo tipo:

new Data(ano, mes, dia).

Me avise caso precisar de ajuda! :)