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

Como chamar a mensagem que a data não é valida, no método mostra?

Olá, fiz o exercício, porém, não consigo mostrar a mensagem "Data não é Válida" na tela, como consigo chamar a mensagem no método mostra()?

eu estava pensando em inserir um if no mostra(), por exemplo:

se Data não é válida, mostra mensagem que não é válida, se não, mostra a mensagem Date Entrada no Banco:....

eu até conseguir inserir o if, mas ele mostra as duas mensagens, então eu retirei.

obs.: do jeito que está não mostra a mensagem de erro.

Seguem meus códigos:

class Funcionario{
    private String nome;
    String departamento;
    private double salario;
    Data dataEntradaBanco;
    int rg;

    public Funcionario(){

    }

    public Funcionario(String nome){
        this.nome = nome;
    }

    public void recebeAumento(double aumento){
        this.salario += aumento;
    }

    public double calculaGanhoAnual(){
        return this.salario * 12;
    }

    public void mostra(){

        System.out.println("Nome do Funcionario: " + this.nome);
        System.out.println("Salario Atual: " + this.salario);
        System.out.println("Ganho anual: " + this.calculaGanhoAnual());

        System.out.println("Data de Entrada no Banco: " +this.dataEntradaBanco.getDataFormatada());

        System.out.println("#########################");
    }

    public void setNome(String setNome){
        this.nome = setNome;
    }

    public String getNome(){
        return this.nome;
    }

    public void setSalario(double setSalario){
        this.salario = setSalario;
    }

    public double getSalario(){
        return this.salario;
    }
}
class Data{
    int dia;
    int mes;
    int ano;

    public Data(int dia, int mes, int ano){

            if (!validaData(dia, mes, ano)) {
                System.out.println("A data " + getDataFormatada() + " nao e valida!");
            } else{
                this.dia = dia;
                this.mes = mes;
                this.ano = ano;
            }
    }

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

        int ultimoDiaDoMes = 31;
        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;
    }    

    String getDataFormatada(){
        return dia + "/" + mes + "/" + ano;
    }    
}
class Empresa{
    private String nome;
    private int cnpj;
    private Funcionario[] funcionarios;
    int livre = 0;

    void adicionar(Funcionario f){
        this.funcionarios[this.livre] = f;
        this.livre++;
    }

    public Empresa(int tamanho){
        this.funcionarios = new Funcionario[tamanho];
    }

    public void setFuncionario(Funcionario[] funcionarios){
        this.funcionarios = funcionarios;
    }

    public Funcionario getFuncionario(int posicao){
        return this.funcionarios[posicao];
    }    

    boolean contem(Funcionario f){
        for (int i = 0 ; i < this.livre ; i++ ) {
            Funcionario funcionarios = this.funcionarios[i];
            if (f == funcionarios) {
                return true;
            }
        }
        return false;
    }

    void mostraFuncionarios(){
        for (int i = 0;i<this.funcionarios.length;i++) {
            Funcionario funcionarios = this.funcionarios[i];

            System.out.println("Funcionario na posicao: " + i);
            if (funcionarios != null) {
                System.out.println("Nome: " + funcionarios.getNome());
                System.out.println("R$ " + funcionarios.getSalario());
            } else{
                System.out.println("Nome: Sem Cadastro!!");
            }            
        }
    }

    void mostraTodasInformacoes(){
        for (int i = 0;i < this.livre ;i++ ) {
            System.out.println("Funcionario na posicao: "+ i);
            this.funcionarios[i].mostra();
            System.out.println("this.livre: " + this.livre);
        }
    }
}
class TesteEmpresa{
    public static void main(String[] args) {
        Empresa empresa = new Empresa(10);

        Funcionario func1 = new Funcionario("Claudio");
        func1.setSalario(3000);
        func1.dataEntradaBanco = new Data(10,7,1016);
        empresa.adicionar(func1);

        Funcionario func2 = new Funcionario("Yann");
        func2.setSalario(3600);
        func2.dataEntradaBanco = new Data(15,7,1016);
        empresa.adicionar(func2);

        Funcionario func3 = new Funcionario("Ranih");
        func3.setSalario(4600);
        func3.dataEntradaBanco = new Data(20,8,2016);

        empresa.adicionar(func3);
        empresa.mostraTodasInformacoes();        
    }
}
class TesteFuncionario{
    public static void main(String[] args) {

        Funcionario func1 = new Funcionario();

        func1.setNome("Claudio");
        func1.departamento = "TI";
        func1.rg = 511111111;

        func1.dataEntradaBanco = new Data(20,8,2016);
        func1.setSalario(5000);
        func1.recebeAumento(100);

        func1.mostra();

        Funcionario func2 = new Funcionario();

        func2.setNome("Yann");
        func2.departamento = "RH";
        func2.rg = 788811111;

        func2.dataEntradaBanco = new Data(30, 7, 2009);        
        func2.setSalario(7000);
        func2.recebeAumento(300);

        func2.mostra();

        if(func1 == func2){
            System.out.println("Iguais");
        } else {
            System.out.println("Diferentes");
        }
    }
}
5 respostas

Você está tentando verificar a data que foi setada no funcionario no atributo dataEntradaBanco, porém seu metódo mostra em nenhum momento faz essa verificação. A chamada do método mostra após a atribuição, que é como suponho que tenha feito, não funciona pois o valor nem conseguiu ser atribuído ao atributo então a verificação após não vai funcionar. A verificação da validade da data já é feita no construtor da classe Data. Então só precisamos no método mostra verificar se essa atribuição foi feita ou não, por exemplo:

    public void mostra(){

    //resto do código
    if(data == null){
            System.out.println("Data não é valida");
        }

Deu para entender?

Marcio, minha dificuldade está em: Estando eu no método Mostra, na classe Funcionario, como eu pego o valor true ou false, do método validaData da classe Data, para que eu possa fazer a verificação com o If no Mostra e mostrar a mensagem de Data inválida? Fiz o que foi orientado por você, e não mostrou a mensagem, na verdade, alterei o código e minha data não recebe null.

Grato.

Segue minha classe Data:

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 (!validaData(dia, mes, ano)) {
                System.out.println("A data " + getDataFormatada() + " nao e valida!");
            }             
    }

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

        int ultimoDiaDoMes = 31;
        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;
    }    

    String getDataFormatada(){
        return dia + "/" + mes + "/" + ano;
    }    
}

Desculpa coloquei errado mesmo. Você pode chamar no método mostra o método valida da data. O atributo dataEntradaBanco de Funcionario é do tipo Data então você consegue chamar métodos dessa classe, por exemplo:

public void mostra(){
    if(!data.valida())
        System.out.println("data inválida");
    }

mas para isso precisaria que o método valida da classe Data seja public em vez de private

public boolean validaData(int dia, int mes, int ano){
        if (dia <= 0 || mes <=0 || mes > 12 || ano < 1900) {
            return false;
        }
...

coloquei public, mas não compila: Sem os atributos no validaData da erro de atributos, e mesmo colocando os atributos, da erro Cannot find Symbol.

if (!this.dataEntradaBanco.validaData(dia, mes, ano)) {
            System.out.println("data inválida");
        }
solução!

Consegui!!!

Não sei se é o correto pela convenção, mas...:

Criei um método boolean getValidaData(), na classe Data, sem a passagem de parametro, e verificando se o valida data é True ou False.

Na classe Funcionario fiz o If no método mostra() e imprimindo a mensagem.

classe Data:

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;                
    }

    public boolean getValidaData(){
        if (!validaData(dia, mes, ano)) {
                return true;
        }
        return false;
    }
// Demais códigos

classe Funcionario - método mostra:

public void mostra(){

        System.out.println("Nome do Funcionario: " + this.nome);
        System.out.println("Matricula do Funcionario: " +this.identificador);
        System.out.println("Salario Atual: " + this.salario);
        System.out.println("Ganho anual: " + this.calculaGanhoAnual());                
        if (this.dataEntradaBanco.getValidaData()) {
            System.out.println("data invalida " + this.dataEntradaBanco.getDataFormatada());
        }else{
            System.out.println("Data de Entrada no Banco: " +this.dataEntradaBanco.getDataFormatada());
        }
        System.out.println("#########################");
    }