Logica Na estação

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:

[color=darkred] import java.util.Scanner; [/color]
[color=darkred] public class Estacao{[/color]
[color=red]private int mes;
private int ano;
private int dia;[/color]

                         [color=darkred]  	public int getAno() { [/color]
	   [color=red]return [/color] ano;
          }

public void setAno(int ano) {
	this.ano = ano;
}

public int getDia() {
	return dia;
}

public void setDia(int dia) {
	this.dia = dia;
}

public int getMes() {
	return mes;
}

public void setMes(int mes) {
	this.mes = mes;

Na parte do MAIn e testa eu ja não sabia o que fazer…

Alguem poderia me mostrar a logica do programa?

abraço

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…

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.

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

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.
 */

package exemplos.guj;

import java.util.Date;

/**
 *
 * @author Diego Inácio Goergen
 */
public class EstacaoDoAno {
      
      private String nome;
      private Date inicio;
      private Date fim;
      
      /** Creates a new instance of EstacaoDoAno */
      public EstacaoDoAno() {
      }

	public String getNome() {
		return nome;
	}

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

	public Date getInicio() {
		return inicio;
	}

	public void setInicio(Date inicio) {
		this.inicio = inicio;
	}

	public Date getFim() {
		return fim;
	}

	public void setFim(Date fim) {
		this.fim = fim;
	}

public static void main(String[] args){
	      
	      EstacaoDoAno[] estacoes = new EstacaoDoAno[]{ new EstacaoDoAno(), new EstacaoDoAno(), new EstacaoDoAno(), new EstacaoDoAno() };
	      
	      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…

HUmm…vetores…Não pensei nisso…

Mais ainda não entendi direito…Mas estou começando a imaginar OO…

vlw abraço.

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:

new Date(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() ); }

É 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

Mas o after e o before do Date funcionam assim. Você não precisa se preocupar com isso…

Não consegui enchegar isso…

Vo digitar o codigo ak ver se consego ver o Antes e Depois…

[quote=ClovisCmb]Não consegui enchegar isso…

Vo digitar o codigo ak ver se consego ver o Antes e Depois…
[/quote]

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.

[quote=thegoergen][quote=ClovisCmb]Não consegui enchegar isso…

Vo digitar o codigo ak ver se consego ver o Antes e Depois…
[/quote]

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.[/quote]

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…

Coloca ali no main, logo depois de setar os nomes.

Vou cadastrar todas as datas em um vetor???/

Não tenho um conhecimento para fazer isso ainda…

[quote=ClovisCmb]Vou cadastrar todas as datas em um vetor???/

Não tenho um conhecimento para fazer isso ainda…

[/quote]

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

[quote=thegoergen][quote=ClovisCmb]Vou cadastrar todas as datas em um vetor???/

Não tenho um conhecimento para fazer isso ainda…

[/quote]

Não é num vetor separado, é em cada estação, logo depois do nome. assim:

[code]
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…?

[/code][/quote]

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

Cara… Foi mals… mas eu fiz uma caca… Testei melhor, e deua laguns erros. Usando GregorianCalendar funciona melhor. Testa essa cllasse aqui!!

[code]
import java.util.Calendar;
import java.util.GregorianCalendar;

/**
*

  • @author Diego Inácio Goergen
    */
    public class EstacaoDoAno {

    private String nome;
    private Calendar inicio;
    private Calendar fim;

    /** Creates a new instance of EstacaoDoAno */
    public EstacaoDoAno() {
    }

    public String getNome() {
    return nome;
    }

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

    public Calendar getInicio() {
    return inicio;
    }

    public void setInicio( Calendar inicio) {
    this.inicio = inicio;
    }

    public Calendar getFim() {
    return fim;
    }

    public void setFim( Calendar fim) {
    this.fim = fim;
    }

    public boolean isNestaEstacao( Calendar 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() );
    }

    public static void main(String[] args){

     EstacaoDoAno[] estacoes = new EstacaoDoAno[]{ new EstacaoDoAno(), new EstacaoDoAno(), new EstacaoDoAno(), new EstacaoDoAno() };
     
     estacoes[0].setNome("Verão");
     
     estacoes[0].setInicio( new GregorianCalendar(2007,11,20) );
     estacoes[0].setFim( new GregorianCalendar(2008,2,19) );
     
     estacoes[1].setNome("Outono");
     estacoes[1].setInicio( new GregorianCalendar(2008,2,20) );
     estacoes[1].setFim( new GregorianCalendar(2008,5,19) );
     
     estacoes[2].setNome("Inverno");
     estacoes[2].setInicio( new GregorianCalendar(2008,5,20) );
     estacoes[2].setFim( new GregorianCalendar(2008,8,19) );
     
     estacoes[3].setNome("Primavera");
     estacoes[3].setInicio( new GregorianCalendar(2008,8,20) );
     estacoes[3].setFim( new GregorianCalendar(2008,11,19) );
     
     // Aqui acabou a inicialização... agora vamos testar a data de hoje...
     
     Calendar c = new GregorianCalendar();
     for (int i = 0; i < estacoes.length; i++){
       if (estacoes[i].isNestaEstacao(c)){
     	System.out.println( " A data " + c.getTime() + " está na estação " + estacoes[i].getNome());
       }
     }
    

    }

}[/code]

[EDIT]

Alterei os parâmetros e atributos para Calendar, substituindo os GregorianCalendar

Nossa …nunca tinha visto essa classe…

Vou testar ak…

vlws kra abraço!