Questão com tudo q se tem direito!

8 respostas
kamuiorg

Ola pessoal,

Estou iniciando no estudo de JAVA, e me deparei com uma questão q já estou quebrando a cabeça há uma semana. Tentei resolvê-la mas não conseguir. Caso alguém possa postar a resposta pra mim ficaria grato. Garanto q com a resposta em mãos estudarei o código e conseguirei aprender de maneira satisfatória e poderei me aprofundar nas minhas dificuldades.

Desde já Obrigado!

  1. Crie uma classe chamada “Data”, que deve
    conter os seguintes atributos PRIVADOS:

= “ultimaAlteracaoComSucesso” do tipo String;

  • “dia” do tipo int;
  • “mes” do tipo int;
  • “ano” do tipo int;

E as seguintes características:

A) Construtor com parâmetros para iniciar todos os atributos,
com exceção do atributo ultimaAlteracaoComSucesso, que deve
receber, no aludido construtor, o valor
‘Objeto inalterado após a instância’.
Esse construtor DEVE GARANTIR que os valores informados nos
parâmetros sejam válidos, e, caso não sejam, deve lançar uma
exceção com a mensagem de um dos métodos (setDia, setMes
ou setAno), de acordo com o erro detectado!

Um método privado que sirva para informar se um ano é
bissexto, e possua, EXATAMENTE, a seguinte assinatura:
‘private boolean anoBissexto(int ano)’.
Considere que, o algoritmo para identificar se um ano é
Bissexto é o seguinte:
Se o ano terminar em ‘00’ ele só será bissexto se for
divisível por 400, caso contrário, só será bissexto se for
divisível por 4.

C) Um método privado que sirva para informar quantos dias
determinado mes possui, em determinado ano, e que possua
EXATAMENTE a seguinte assinatura:
private int quantidadeDeDiasDoMes(int mes, int ano)
Essa DEVE ser feita com o apoio da função ‘anoBissexto’,
haja vista que, para determinar a quantidade de dias do
mês de feveireiro, essa informação é imprescindível!

D) Um método que contenha, EXATAMENTE, a seguinte
assinatura: ‘public String getUltimaAlteracaoComSucesso()’
e retorne o conteúdo do atributo privado
ultimaAlteracaoComSucesso

E) Um método que contenha, EXATAMENTE, a seguinte
assinatura: ‘public int getDia()’
e retorne o conteúdo do atributo privado dia.

F) Um método que contenha, EXATAMENTE, a seguinte assinatura
‘public void setDia(int value) throws Exception’, e,
OBRIGATORIAMENTE, deve funcionar da seguinte maneira:
Destina-se a setar o valor do atributo privado dia, e,
antes de fazê-lo, precisa verificar duas coisas:
a) Se o valor a ser atribuído é maior ou igual a 1;
b) Se o valor a ser atribuído, combinado com os valores
atuais de mes e ano, representará uma data válida!
DICA: Utilize a função QuantidadeDeDiasDoMes!

Se as duas condições acima forem respeitadas, então a
atribuição será permitida, e o atributo privado
ultimaAlteracaoComSucesso deverá receber um texto,
EXATAMENTE igual ao que se segue:

“Alteração realizada com sucesso: Setar dia igual a
(Data Antiga = ‘<objAntesAlteracao.toString()>’ e
Data Atual = ‘<objDepoisAlteracao.toString()>’)”

Se pelo menos uma das condições acima não for respeitada,
então, a atribuição não será permitida, e uma exceção será
lançada, informando, EXATAMENTE, a seguinte mensagem:

“Alteração impossível: O Valor é inválido para o dia,
considerando o valor atual do mês (igual a )
e o do ano (igual a )”

G) Um método que contenha, EXATAMENTE, a seguinte
assinatura: ‘public int getMes()’
e retorne o conteúdo do atributo privado mes.

H) Um método que contenha, EXATAMENTE, a seguinte assinatura

public void setMes(int value) throws Exception, e,

OBRIGATORIAMENTE, deve funcionar da seguinte maneira:

Destina-se a setar o valor do atributo privado mes, e,

antes de fazê-lo, precisa verificar três coisas:

a) Se o valor a ser atribuído é maior ou igual a 1;

b) Se o valor a ser atribuído é menor ou igual a 12;

c) Se o valor a ser atribuído, combinado com os valores

atuais de dia e ano, representará uma data válida!

DICA: Utilize a função QuantidadeDeDiasDoMes!

Se as três condições acima forem respeitadas, então a
atribuição será permitida, e o atributo privado
ultimaAlteracaoComSucesso deverá receber um texto,
EXATAMENTE igual ao que se segue:

“Alteração realizada com sucesso: Setar mes igual a
(Data Antiga = ‘<objAntesAlteracao.toString()>’ e
Data Atual = ‘<objDepoisAlteracao.toString()>’)”

Se pelo menos uma das condições acima não for respeitada,
então, a atribuição não será permitida, e uma exceção será
lançada, informando, EXATAMENTE, a seguinte mensagem:

“Alteração impossível: O Valor é inválido para o mes,
considerando o valor atual do dia (igual a )
e o do ano (igual a )”

I) Um método que contenha, EXATAMENTE, a seguinte
assinatura: ‘public int getAno()’
e retorne o conteúdo do atributo privado ano.

J) Um método que contenha, EXATAMENTE, a seguinte assinatura

public void setAno(int value) throws Exception, e,

OBRIGATORIAMENTE, deve funcionar da seguinte maneira:

Destina-se a setar o valor do atributo privado ano, e,

antes de fazê-lo, precisa verificar três coisas:

a) Se o valor a ser atribuído é maior ou igual a 1;

b) Se o valor a ser atribuído é menor ou igual a 9999;

c) Se o valor a ser atribuído, combinado com os valores

atuais de dia e mes, representará uma data válida!

DICA: Utilize a função QuantidadeDeDiasDoMes!

Se as três condições acima forem respeitadas, então a
atribuição será permitida, e o atributo privado
ultimaAlteracaoComSucesso deverá receber um texto,
EXATAMENTE igual ao que se segue:

“Alteração realizada com sucesso: Setar ano igual a
(Data Antiga = ‘<objAntesAlteracao.toString()>’ e
Data Atual = ‘<objDepoisAlteracao.toString()>’)”

Se pelo menos uma das condições acima não for respeitada,
então, a atribuição não será permitida, e uma exceção será
lançada, informando, EXATAMENTE, a seguinte mensagem:

“Alteração impossível: O Valor é inválido para o ano,
considerando o valor atual do dia (igual a )
e o do mes (igual a )”

K) Um método que sobreponha o método toString(), da classe
Object, de tal forma que, o retorno seja uma string que
exiba a data armazenada nos atributos privados desta classe,
sobretudo, o formato da string retornada deve ser,
EXATAMENTE, o seguinte: dd/mm/yyyy

8 Respostas

T

Allyson, é só você pegar o tal enunciado, ler com cuidado, e ir codificando. Mais detalhado que a especificação que o professor passou é um pouco difícil.

De qualquer maneira, para você saber se um ano é bissexto, basta saber :

- Se ele não for divisível por 4, então não é bissexto;
- Se for divisível por 4, então
   - Se for divisível por 400, então é bissexto.
   - Se for divisível por 100, então não é bissexto.
   - Senão, é bissexto.

E para saber se um dia é válido, dado um mês e um ano basta saber:

- Os meses que têm 31 dias são: janeiro, março, maio, julho, agosto, outubro, dezembro.
- Os meses que têm 30 dias são: abril, junho, setembro, novembro.
- O mês que tem 28 dias é fevereiro, exceto se o ano for bissexto, quando então ele tem 29 dias.
berg.pb

Fala kamuiorg

Concordo com o thingol.
Mais explicado que o seu professor, ta um pouco complicado.

Então, tente escrever o código e, as dúvidas, posta aqui!!

Abraços
Boa sorte

kamuiorg

Obrigado pessoal!
Farei isso!
Vlw!

kamuiorg

OI pessoal, EU de novo! :D

De acordo com a questão que postei acima, poderia corrigir meu codigo e dizer se estou no caminho certo?

Desde de ja, Obrigado!!!

private String ultimaAlteracaoComSucesso;
private int ano;
private int mes;
private int dia;


public void setAno(int ano) throws Exception
{
    try
    {
        if ((ano > 0) && (ano <= 9999))
            this.ano = ano;
    }
    catch (Exception e)
    }
        System.out.println("Ano Invalido")
    }
}

private boolean anoBissexto(int ano)
{
    if (ano % 100 = 00)
        return true;
    else 
        if (ano % 4 = 0)
            return true;
        else
            return false;
}

private int quantidadeDeDiasDoMes(int mes,int ano)
{
     if (mes == 1)
         return 31;
     if (mes == 2)
         if (anoBissexto == true)
             return 29;
         else
             return 28;
     if (mes == 3)
         return 31;
     if (mes == 4)
         return 30;
     if (mes == 5)
         return 31;
     if (mes == 6)
         return 30;
     if (mes == 7)
         return 31;
     if (mes == 8)
         return 31;
     if (mes == 9)
         return 30;
     if (mes == 10)
         return 31;
     if (mes == 11)
         return 30;
     if (mes == 12)
         return 31;
}

public void setMes(int mes) throws Exception
{
     try
     {
         if ((mes > 0) && (mes <= 12))
             this.mes = mes;
     }
     catch (Exception e)
     }
         System.out.println("Mes Invalido");
     }
}

public void setDia(int dia) throws Exception 
{
     try 
     {
         if ((dia > 0) &&  (dia < quantidadeDeDiasDoMes(int mes,int ano)))
               this.dia = dia;
     }  
     catch (Exception e)
     {
          System.out.println("Dia Invalido");         
     }
janjan

é o seguinte.
no seu metodo setAno ele nao ira cair no erro
em vez de colocar dentro de um try catch
coloque o erro dentro do else daquele if.
e no setMes tambem
e no setDia tambem
e os demais me parecem funcionar legau.

berg.pb
private int quantidadeDeDiasDoMes(int mes,int ano)  
	  {  
	       if ((mes == 2) && (anoBissexto(ano)))  
	           return 29;
	       else if ((mes == 2) && (!anoBissexto(ano)))  
	           return 28;
	       else if ((mes < 8) && (mes /2 ==0))     
	           return 30;  
	       else if ((mes >= 8) && (mes /2 ==0))  
	           return 31;  
	       
	       return 31;
	       
	      
	  }
pmlm
berg.pb:
private int quantidadeDeDiasDoMes(int mes,int ano)  
	  {  
	       if ((mes == 2) && (anoBissexto(ano)))  
	           return 29;
	       else if ((mes == 2) && (!anoBissexto(ano)))  
	           return 28;
	       else if ((mes < 8) && (mes /2 ==0))     
	           return 30;  
	       else if ((mes >= 8) && (mes /2 ==0))  
	           return 31;  
	       
	       return 31;
	       
	      
	  }
Esse código não funciona. Em vez de mes/2 talvez quisesses dizer mes%2. E mesmo assim não ia funcionar para os meses depois de Agosto. Código corrigido:
private int quantidadeDeDiasDoMes(int mes,int ano)   {  
	       if ((mes == 2) && (anoBissexto(ano)))  
	           return 29;
	       else if ((mes == 2) && (!anoBissexto(ano)))  
	           return 28;
	       else if ((mes < 8) && (mes %2 ==0))     
	           return 30;  
	       else if ((mes >= 8) && (mes %2 ==1))  
	           return 30;  
	       
	       return 31;
  }
Uma outra solução:
private int quantidadeDeDiasDoMes(int mes,int ano)  {  
    switch (mes){
        case 2: 
            if (anoBissexto(ano)) 
                return 29; 
            else 
                return 28;
        case 4:
        case 6: 
        case 9: 
        case 11: 
            return 30;
        default: 
            return 31;
    }
}
berg.pb

OK. OBrigado

Erro de operador!!
Valeu!

Criado 20 de abril de 2009
Ultima resposta 21 de abr. de 2009
Respostas 8
Participantes 5