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

Não entendi o if

nesse primeiro if dia, mes, ano ñ deviam ter o tipo especificado? ex: if (! isDataViavel(int dia, int mes, int ano)){ Não entendi esse if!

public class 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 " + formata() + " não existe!");
                }
            }

            private boolean isDataViavel(int dia, int mes, int ano) {
                if (dia <= 0 || mes <= 0 || mes > 12 || ano <= 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;
            }
        }
2 respostas

Buenas, Enquanto não vem uma resposta mais completa e detalhada. Posso adiantar que, pelo que sei, não há necessidade de fazer isso: if (! isDataViavel(int dia, int mes, int ano)

Pois ao usar o "this.dia, this.mes, this,ano" você esta já está utilizando os de acordo com o invocado.

Pelo que sei, resumidamente é isso, mas pode aguardar uma resposta mais completa em seguida, espero ter ajudado.

solução!

Raphaelli, a resposta do Herick está correta. Mas vou tentar ser mais detalhista.

Para se criar um método, você precisa obrigatoriamente especificar os tipos dos parâmetros, logo:

//criação do método
private boolean isDataViavel(int dia, int mes, int ano) {
//código omitido...
}

Repare que na criação, você especificou que o parametro dia é um int, mes é um int e ano é um int.

Para invocar o método, você só precisa passar variáveis que possuam o mesmo tipo, logo:

//código omitido...
    boolean retornoMetodo = isDataViavel(dia, mes, ano);
    /*como o método 'isDataViavel(...)' retorna boolean,
    eu atribui este retorno a uma variavel chamada 'retornoMetodo'
    */

    if (!retornoMetodo) {
        System.out.println("A data " + formata() + " não existe!");
    }
//restante do código...

Espero ter ajudado.