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

Dúvida na solução do Desafio

Gostaria de saber se essa solução é a correta para o Desafio.

class Data{

    int dia, mes, ano;


    public Data(int dia, int mes, int ano){
        this.dia = dia;
        this.mes = mes;
        this.ano = ano;

    }

    public void validaData(){


        if (this.mes == 1 || this.mes == 3 || this.mes == 5 || this.mes == 7 || this.mes == 8 || this.mes == 10 || this.mes == 12){
                if (this.dia > 0 && this.dia <= 31 && this.ano > 0){
                    System.out.println (this.dia + "/" + this.mes + "/" + this.ano + " E uma data valida.");
                }else{
                    System.out.println (this.dia + "/" + this.mes + "/" + this.ano + " E uma data invalida.");
                }
        }else

        if (this.mes == 4 || this.mes == 6 || this.mes == 9 || this.mes == 11){
                if (this.dia > 0 && this.dia <= 30 && this.ano > 0){
                    System.out.println (this.dia + "/" + this.mes + "/" + this.ano + " E uma data valida.");
                }else{
                    System.out.println (this.dia + "/" + this.mes + "/" + this.ano + " E uma data invalida.");
                }
        }else if (this.mes == 2 && this.ano > 0 ){

                 if ( ( this.ano % 4 == 0 && this.ano % 100 != 0 && this.dia <= 29 && this.dia != 0) || 
                      ( this.ano % 400 == 0 && this.dia <= 29 && this.dia != 0) ){
                        System.out.println (this.dia + "/" + this.mes + "/" + this.ano + " E uma data valida. Ano e Bissexto");
                 }else if (this.dia <= 28 && this.dia != 0){
                        System.out.println (this.dia + "/" + this.mes + "/" + this.ano + " E uma data valida. Ano nao e Bissexto ");

                 }else{
                     System.out.println (this.dia + "/" + this.mes + "/" + this.ano + " E uma data invalida.");
                 }

        }else {
            System.out.println (this.dia + "/" + this.mes + "/" + this.ano + " E uma data invalida.");

        }



    }


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

}

class TestaFuncionario {

    public static void main(String[] args) {


        Empresa emp1 = new Empresa(10);
        emp1.setNomeEmpr ("Casarao das Tintas Ltda.");
        emp1.setCnpjEmpr ("09.039.015/0001-38");

        Funcionario func1 = new Funcionario();
        func1.setNome ("Antonia dos Santos");
        func1.setDpto ("Setor de Vendas");
        func1.setRg("33.123.456-10");
        func1.setSalario(2600);
        func1.setAumento(10);
        Data dataEntrFunc1 = new Data(31,02,2012);
        dataEntrFunc1.validaData();
        func1.setDataEntr(dataEntrFunc1.getFormatada());
        emp1.adicionar(func1);

        Funcionario func2 = new Funcionario();
        func2.setNome ("Carlos Alberto");
        func2.setDpto ("Setor de Compras");
        func2.setRg("22.133.444-20");
        func2.setSalario(8600);
        func2.setAumento(10);
        Data dataEntrFunc2 = new Data(29,02,2016);
        dataEntrFunc2.validaData();
        func2.setDataEntr (dataEntrFunc2.getFormatada());
        emp1.adicionar(func2);


        emp1.imprimeEmpresa();
        emp1.imprimeTodasAsInformacoes();

        boolean existe = emp1.contem(func2);

         if (existe) {
           System.out.println("Funcionario ja existe");
        }else {
           System.out.println("Funcionario nao existe");
        }


    }
}
7 respostas

Você pode descrever o desafio? Qual é o pedido?

Desafio: Como garantir que datas inválidas como 31/2/2012 não sejam aceitas pela sua classe Data? Altere sua classe Data para fazer esse tipo de validação e compartilhe aqui o código dela.

solução!

Vendo por cima só achei um erro na validação dos dias de fevereiro, pois se colocar um dia negativo ele dá como verdadeiro.

Eu também retornaria um booleano ao invés de não retornar nada e imprimir, deixando o sysout para quem chamou.

Welington, sua classe data pode ser muito mais simples, e talvez você nem precise dela, use o contrutor da classe java.util.GregorianCalendar GregorianCalendar(int year, int month, int dayOfMonth)

Use o método setLenient(false), assim quando o valor dos parâmetros for inválido uma exceção será lançada, desta forma em um try catch você saberá se os valores forem inválidos

Use o dateformat pra formatar sua data, assim você não precisa reinventar a roda, basta usar esta classe, agora só pesquisa a sintaxe certinha.

Em uma pesquisa no google sobre GregorianCalendar e setlenient vc pegara o código pronto.

Carlos,

O objetivo do exercício em questão não é usar classes específicas já prontas do Java e sim aprender os conceitos de orientação a objeto, criação de classe e métodos. A classe DATA poderia ser qualquer outra coisa, mas é interessante o bastante pra você treinar justamente o fluxo de condicionais como é essa validação "na mão".

Não se esqueça que é um curso BÁSICO.

Hugo, tudo bem! Eu não li o tópico lá encima "Referente ao curso Java I, no capítulo Construtores e atividade Desafio - Exercício 3". Peço desculpas.

Obrigado.