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

Teste de data invalida

testei uma data invalida para verificar se aparece o aviso, mas imprime normal.

minha classe data igual a resposta do exercicio.

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

    public Data() {}

    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()+" nao existe!");
        }
    }

    private boolean isDataViavel(int dia, int mes, int ano) {
        if(dia<=0 || mes<=0 || mes>12 || ano<=0){
            return false;
        }

        int ultimoDiaDoMes = 31;
        if(mes==4 || mes==6 || mes==9 || mes==11) {
            ultimoDiaDoMes = 30;
        } else if (mes==2) {
            ultimoDiaDoMes = 28;
            if(ano%4==0) {
                ultimoDiaDoMes = 29;
            }
        }
        if(dia > ultimoDiaDoMes) {
            return false;
        }
        return true;
    }

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

    public void mostra(){
        System.out.println("nome: "+ this.nome);
        System.out.println("Departamento: "+ this.departamento);
        System.out.println("Salatio: "+ this.salario);
        System.out.println("Data de entrada: "+ this.dataEntrada.getFormatada());
            //Erro
        System.out.println("RG: "+ this.rg);
        System.out.println("\n");
    }
}

Eu sei que deveria trocar o getFormatada(), mas não sei oque colocar, alguem me ajuda?

4 respostas

parece ta tudo certo, mostra tua classe principal aqui a do main

class Worker{
    public static void main(String[] args){
        Funcionario fabio = new Funcionario("Fabio");

        fabio.salario = 1000;
        fabio.aumento(200);
        fabio.dataEntrada = new Data(32, 14, 1980);

        Funcionario gal = new Funcionario();

        gal.salario = 1100;
        gal.aumento(-100);
        gal.dataEntrada = new Data(42, 1, 2014);
        gal.rg = "123456789";

        fabio.mostra();
        gal.mostra();
    }
}

e me aparece assim

A data 32/14/1980 nao existe!
A data 42/1/2014 nao existe!
Funcionario numero: 1
nome: Fabio
Departamento: null
Salatio: 1200.0
Data de entrada: 32/14/1980
RG: null


Funcionario numero: 2
nome: null
Departamento: null
Salatio: 1000.0
Data de entrada: 42/1/2014
RG: 123456789

Aparece o não existe, mas a mensagem não deveria substituir a aparição da data?

Dentro do seu método "mostra()", você pode colocar um if e chamar o método "isDataViavel()":

if ( isDataViavel() ) {
    vc apresenta a data
}else{
    vc apresenta a mensagem de "data não existe"
}
solução!

OI Gal, tu pode fazer a validação (isDataViavel) lá no método getFormatada() e no teu construtor tu chamar o método getFormatada().

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

        getFormatada();
    }

método getFormatada:
    public String getFormatada() {
        if (! isDataViavel(dia, mes, ano)) {
                return "A data " + this.dia + "/" + this.mes + "/" + this.ano + " nao existe!";
        } else {
            return "A data " + this.dia + "/" + this.mes + "/" + this.ano + " existe!";
        }

    }