Olá pessoal…Bem tive uma prova hj e o ultimo exercicio era assim:
…Crie um programa que receba do usuario o DIA, MES, ANO. Crie uma classe testadora tbm…Ao informaro dia o e o mes deve ter um metodo que exiba qual estação do ano esta…
Os dados eram os seguintes:
Outono 20 março a 19junho ; Inverno20junho a 19setembro; Primavera 20 setembro a 19 dezembro ; Primavera 20 dezembro a 19 março…
Bem na verdade não consegui terminar esse ultimo exercicio…Sinceramente não consegui pensar e o tempo não ajudou pois eram 10 exercicios tbm…
eu fiz até esse ponto:
Por que você não cria uma Interface EstacaoDoAno com dois métodos: Calendar getInicio(), Calendar getFim(), String getEstacao() …algo assim.
Inverno, Primavera, Outono e Verao serão implementações da sua interface EstacaoDoAno (ou modele como classe abstrata, já que as estações são fortemente especializadas da EstacaoDoAno).
Pense em OO para desenvolver…
thegoergen
Como o mfjeng .
Daí, quando o usuário digitar a data, verifica se ela está entre o getInicio() e o getFim() de cada estação… Acho que não precisa criar classes separadas para cada estação. Apenas crie um atributo Nome na classe EstacaoDoAno, e no main você cria um Array de EstacaoDoAno.
ClovisCmb
Eu estou aprendendo estruturas de dados em OO na faculdade ainda…
Achei que vcs poderiam me mandar um exemplo…EU não aprendi Interface ainda…so queria fazer algo mais completo para aprender mais …
Vlws
thegoergen
Classe estação do ano.
/* * EstacaoDoAno.java * * Created on 29 de Março de 2008, 10:30 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */packageexemplos.guj;importjava.util.Date;/** * * @author Diego Inácio Goergen */publicclassEstacaoDoAno{privateStringnome;privateDateinicio;privateDatefim;/** Creates a new instance of EstacaoDoAno */publicEstacaoDoAno(){}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicDategetInicio(){returninicio;}publicvoidsetInicio(Dateinicio){this.inicio=inicio;}publicDategetFim(){returnfim;}publicvoidsetFim(Datefim){this.fim=fim;}publicstaticvoidmain(String[]args){EstacaoDoAno[]estacoes=newEstacaoDoAno[]{newEstacaoDoAno(),newEstacaoDoAno(),newEstacaoDoAno(),newEstacaoDoAno()};estacoes[0].setNome("Verão");// Agora cadastra as datas de início e fim, que eu não pesquisei...estacoes[1].setNome("Outono");// Agora cadastra as datas de início e fim, que eu não pesquisei...estacoes[2].setNome("Inverno");// Agora cadastra as datas de início e fim, que eu não pesquisei...estacoes[3].setNome("Primavera");// Agora cadastra as datas de início e fim, que eu não pesquisei...// Com tudo cadastrado, leia os valores que o usuário digitar e teste...}}
Essa classe é suficiente. Instancie ela 4 vezes agora.
[EDIT]
Desculpe, mas eu coloquei a data como Date, esqueci que era para ler DIA, MES e ANO… mas com Date é mais fácil e simples, eu acho…
ClovisCmb
HUmm…vetores…Não pensei nisso…
Mais ainda não entendi direito…Mas estou começando a imaginar OO…
vlw abraço.
thegoergen
Bom… agora você tem um vetor com todas as estações, certo??
E agora você lê o dia, mes e ano que o usuário digitar e cria um Date, assim:
newDate(ano,mes,dia);
E com esse Date criado, você verifica em qual estação ele se encaixa. Talvez cri um método na classe EstacaoDoAno, que verifica se o dia está naquela estação:
public boolean isNestaEstacao(Date d){
// A data está nesta estação quando ela for depois do início E antes do final...
return d.after(this.getInicio()) && d.before( this.getFim() );
}
ClovisCmb
É ai meu problema …eu estava pensando na logica de como saber …
Porque por exemplo o Verão e de 20 de março a 19 de junho…
Minha duvida é como vai fiakr a condição pq eu posso ter o dia 20 de março abril maio que ainda e verão, em junhuo naum pois ja iria para outono…
Sabe as ideias vem na cabeça mais naum consigo passar ela para codigos…
vlw
thegoergen
Mas o after e o before do Date funcionam assim. Você não precisa se preocupar com isso…
ClovisCmb
Não consegui enchegar isso…
Vo digitar o codigo ak ver se consego ver o Antes e Depois…
thegoergen
ClovisCmb:
Não consegui enchegar isso…
Vo digitar o codigo ak ver se consego ver o Antes e Depois…
Isso, pega o código, preenche ele com o que eu não sabia (as datas de início e fim) e com a leitura dos dados, e testa. talvez tenha problemas, mas a base é isso.
ClovisCmb
thegoergen:
ClovisCmb:
Não consegui enchegar isso…
Vo digitar o codigo ak ver se consego ver o Antes e Depois…
Isso, pega o código, preenche ele com o que eu não sabia (as datas de início e fim) e com a leitura dos dados, e testa. talvez tenha problemas, mas a base é isso.
As datas eu tenho…Devo implementar nas estações?
Outono 20 março a 19junho ; Inverno20junho a 19setembro; Primavera 20 setembro a 19 dezembro ; Primavera 20 dezembro a 19 março…
thegoergen
Coloca ali no main, logo depois de setar os nomes.
ClovisCmb
Vou cadastrar todas as datas em um vetor???/
Não tenho um conhecimento para fazer isso ainda…
thegoergen
ClovisCmb:
Vou cadastrar todas as datas em um vetor???/
Não tenho um conhecimento para fazer isso ainda…
Não é num vetor separado, é em cada estação, logo depois do nome. assim:
Não tenho um conhecimento para fazer isso ainda...
Não é num vetor separado, é em cada estação, logo depois do nome. assim:
estacoes[1].setNome("Outono");
estacoes[1].setInicio( new Date(2008,3,20) );
estacoes[1].setFim( new Date(2008,6,19) );
Um....Uma pergunta o estacoes[1].setInicio( new Date(2008,3,20) estacoes[1].setFim( new Date(2008,6,19) );
Ja delimita as datas sozinho?...POr exemplo se eu entrar com 20 de junho ele ja sabe q e pro proximo etc..?
thegoergen
o estacoes[1] é o outono. o estacoes[0] é o verão, como estão os nomes… mas se quiser mudar a ordem pode trocar.
O Array estacoes é um array com EstacaoDoAno. Tem várias estacoes, cada uma delas é um objeto EstacaoDoAno diferente… Isso é OO
thegoergen
Cara... Foi mals... mas eu fiz uma caca... Testei melhor, e deua laguns erros. Usando GregorianCalendar funciona melhor. Testa essa cllasse aqui!!
importjava.util.Calendar;importjava.util.GregorianCalendar;/** * * @author Diego Inácio Goergen */publicclassEstacaoDoAno{privateStringnome;privateCalendarinicio;privateCalendarfim;/** Creates a new instance of EstacaoDoAno */publicEstacaoDoAno(){}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicCalendargetInicio(){returninicio;}publicvoidsetInicio(Calendarinicio){this.inicio=inicio;}publicCalendargetFim(){returnfim;}publicvoidsetFim(Calendarfim){this.fim=fim;}publicbooleanisNestaEstacao(Calendard){// A data está nesta estação quando ela for depois do início E antes do final...returnd.after(this.getInicio())&&d.before(this.getFim());}publicstaticvoidmain(String[]args){EstacaoDoAno[]estacoes=newEstacaoDoAno[]{newEstacaoDoAno(),newEstacaoDoAno(),newEstacaoDoAno(),newEstacaoDoAno()};estacoes[0].setNome("Verão");estacoes[0].setInicio(newGregorianCalendar(2007,11,20));estacoes[0].setFim(newGregorianCalendar(2008,2,19));estacoes[1].setNome("Outono");estacoes[1].setInicio(newGregorianCalendar(2008,2,20));estacoes[1].setFim(newGregorianCalendar(2008,5,19));estacoes[2].setNome("Inverno");estacoes[2].setInicio(newGregorianCalendar(2008,5,20));estacoes[2].setFim(newGregorianCalendar(2008,8,19));estacoes[3].setNome("Primavera");estacoes[3].setInicio(newGregorianCalendar(2008,8,20));estacoes[3].setFim(newGregorianCalendar(2008,11,19));// Aqui acabou a inicialização... agora vamos testar a data de hoje...Calendarc=newGregorianCalendar();for(inti=0;i<estacoes.length;i++){if(estacoes[i].isNestaEstacao(c)){System.out.println(" A data "+c.getTime()+" está na estação "+estacoes[i].getNome());}}}}
[EDIT]
Alterei os parâmetros e atributos para Calendar, substituindo os GregorianCalendar
ClovisCmb
Nossa …nunca tinha visto essa classe…
Vou testar ak…
vlws kra abraço!
thegoergen
A GregorianCalendar herda da classe Calendar, ou implementa ela, não sei direito… ela tem mais funções que a Date.
E no main eu faço a inicialização das estações e depois faço um testezinho rápido…
ClovisCmb
Se no caso o usuario digitasse uma data e um mes…
Ai a partir da leitura do dados que ele informou eu apresentaria a estação juntamente com a data e o mes que ele digitou…
Estava pensando em utilizar
Import java.util.Scanner; ( que eu conheço)
}//get e setpublicintgetAno(){returnano;}publicvoidsetAno(intano){this.ano=ano;}publicintgetDia(){returndia;}publicvoidsetDia(intdia){this.dia=dia;}publicintgetMes(){returnmes;}publicvoidsetMes(intmes){this.mes=mes;}//metodos de entrada de dadospublicvoidentraData(){do{System.out.println("Digite o dia");dia=input.nextInt();}while(dia>31);}publicvoidentraMes(){do{System.out.println("Digite o mes");mes=input.nextInt();}while(mes>12);}publicvoidentraAno(){System.out.println("Entre com o ano");ano=input.nextInt();}publicvoidinformaEstacao(){//outono e de 20 de 3 a 20 de 6//inverno de 21 de 6 a 22 de 9//primavera 23 do 9 a 20 do 12//verão de 21 do 12 a 19 do 3if((dia>=20&&mes==12)||(mes<3)||(dia<20&&mes==3)){System.out.println("É verão");}elseif((dia>=20&&mes==3)||(mes<6)||(dia<20&&mes==6)){System.out.println("Outono");}elseif((dia>=20&&mes==6)||(mes<9)||(dia<20&&mes==9)){System.out.println("Inverno");}else{System.out.println("Primavera");}}
Só uma dúvida, você declarou um construtor vazio, não seria mais fácil não escreve-lo e deixar o construtor padrão?
thundercas
Sim Rafael, daria na mesma. Creio que ele tenha escrito apenas para facilitar a visualização.
Quanto ao Gregorian, nunca utilizei, sempre utilizo apenas Calendar. Dei uma pesquisa e vi que a GregorianCalendar é uma SubClasse da Calendar, mas não consegui visualizar qual a real vantagem de utilizá-la ao invés da Calendar.
thegoergen
thundercas:
Quanto ao Gregorian, nunca utilizei, sempre utilizo apenas Calendar. Dei uma pesquisa e vi que a GregorianCalendar é uma SubClasse da Calendar, mas não consegui visualizar qual a real vantagem de utilizá-la ao invés da Calendar.
:oops: Usei o GregorianCalendar apenas porque a classe Calendar é abstrata, daí eu substituí todos os Date por GregorianCalendar… Poderia ter utilizado o GregorianCalendar apenas na hora de testar:
Calendarc=newGregorianCalendar();
ClovisCmb
Então acho q a logica fikou boa…
Naum entendi o CAlendar…
Fiz o padrão para ver melhor interpretação…
ABraço
thegoergen
O que importa é que tu entendeu. Agora que tu viu a lógica e entendeu um pouco de Java, bem-vindo ao GUJ e ao Mundo do Java!
O Calendar, junto com a Date, São as classes que tratam as datas no Java. E acredite, elas fazem milagres…
ClovisCmb
Blz…Entendi a logica foram umas horas bem aplicadas, digem q a pratica leva a perfeição…
Obrigado pela ajuda ai e até breve!
abraço!
ClovisCmb
E se o construtor padrão mudar em uma possivel atualização do JAVA??
Meus programas param de rodar?
Caso o java não fornesa o construtor padrão!
K
kairy
gostaria de ver o esse código da estação completo, tem como postar?
ClovisCmb
Tem sim kra…
ClovisCmb
/*POr
Clovis da Costa Mandoline Bento
CLovisCMB
*/
import java.util.Scanner;
public class EstacaoInicio {
}//get e setpublicintgetAno(){returnano;}publicvoidsetAno(intano){this.ano=ano;}publicintgetDia(){returndia;}publicvoidsetDia(intdia){this.dia=dia;}publicintgetMes(){returnmes;}publicvoidsetMes(intmes){this.mes=mes;}//metodos de entrada de dadospublicvoidentraData(){do{System.out.println("Digite o dia");dia=input.nextInt();}while(dia>31);}publicvoidentraMes(){do{System.out.println("Digite o mes");}while(mes>12);mes=input.nextInt();while((mes==2&&dia>29)||(mes>12||dia>31)){System.out.println("Dia invalido no mes de Fevereiro");System.out.println("Digite o mes");mes=input.nextInt();System.out.println("Digite o dia");dia=input.nextInt();}}publicvoidentraAno(){System.out.println("Entre com o ano");ano=input.nextInt();}publicvoidinformaEstacao(){//outono e de 20 de 3 a 20 de 6//inverno de 21 de 6 a 22 de 9//primavera 23 do 9 a 20 do 12//verão de 21 do 12 a 19 do 3if((dia>=20&&mes==12)||(mes<3)||(dia<20&&mes==3)){System.out.println("É verão - "+dia+"/"+mes+"/"+ano);}elseif((dia>=20&&mes==3)||(mes<6)||(dia<20&&mes==6)){System.out.println("Outono-"+dia+"/"+mes+"/"+ano);}elseif((dia>=20&&mes==6)||(mes<9)||(dia<20&&mes==9)){System.out.println("Inverno - "+dia+"/"+mes+"/"+ano);}else{System.out.println("Primavera-"+dia+"/"+mes+"/"+ano);}}