Ajuda com trabalho em java

Pessoal gostaria da ajuda de vocês para terminar um trabalho da faculdade relacionado a programação em java.
é dada na questão o seguinte:

class data{
   int dia;
   int mes;
   int ano;
}

E pedido :

a) Crie um construtor para a classe, o qual inicializará os campos desta. (Feito)

b) Crie nesta classe um método chamado maior(), o qual receberá um objeto do tipo Data como parâmetro e retornará verdadeiro se a data do objeto ao qual este método é aplicado é maior que o parâmetro passado; caso contrário, retornará falso. (Feito)

c) Crie uma classe chamada Feriado, a qual representa uma data com um nome em particular. (Feito)

d) Crie uma classe chamada Intervalo, a qual contém 2 datas que definem um intervalo. Por exemplo, podemos ter o intervalo que representa o período letivo de 31 de janeiro a 31 de julho. (Feito)

e) Na classe Intervalo, defina um método chamado obtemMeses(), o qual obtém o número de meses contidos no intervalo.

f) Defina um método main(), numa classe chamada Principal, e instancie 2 objetos correspondentes às datas: 8/2/2012 e 31/12/2011.

g) Chame o método maior(), para compará-las, e imprima o resultado na tela.
h) Crie um intervalo a partir dos objetos criados.
i) Imprima a quantidade de meses contidos neste intervalo.

Referente as questões a,b,c e d eu acho que consegui fazer, porém não consigo usar o método obtemMeses() e não tenho noção de como definir um método main(). Se alguém puder dar uma ajuda, apontar onde estão os erros e me ajudar com o código obrigado…Abaixo segue o meu começo…


 
public class data2 {// classe data,objeto
	
	int dia;
	int mes;
	int ano;
	
	public data2(int dia_,int mes_,int ano_){// contrutor
		
		dia=dia_;
		mes=mes_;
		ano=ano_;
	
	}
    
    public boolean  maior(int n1,int n2,int n3){// metodo maior
    	if ((dia>n1)&&(mes>n2)&&(ano>n3)){
    	
    		
    		System.out.println("verdadeiro");
    		return true;
    	}
    	else{
    		
    		System.out.println("falso");
    		return false;
    	}
    	
    }
    
    public class feriado { //classe feriado
    	
    	int[] natal={25,12,2012};
    	    	    	
    }
    
    public class intervalo { //classe intervalo
    	
    	int[] inicio={31,2,2012};
    	int[] final_periodo={31,7,2012};
    	
    	
    }
    
    public int obtem_meses(int total){ //metodo para obter meses!!!
    	
    	total=((final_periodo[1])-(inicio[1]));
    	return total;
    	
    }
    
    public static void main(String[] args) {
    	
    	// TODO, add your application code
    	data2 testando;
    	
    	testando= new data2(5,5,2012);// instanciando
    	
    	System.out.println("A data passada foi :"+testando.dia+"/"+testando.mes+"/"+testando.ano);
    	System.out.println("   ");
    	testando.maior(6,6,2013);// passando como parametro
    }
}

Obrigado pela atenção…

Oi,

Só uma pergunta antes de lhe ajudar.

Você realmente precisa trabalhar com variáveis int ou pode ser do tipo Date?

Tchauzin!

Acho que sua classe Intervalo não faz o que pede o enunciado. Em vez de armazenar os dados em arrays, você precisa criar duas instâncias do tipo data, definido acima.

Qual a dificuldade em usar o método obtemMeses?

Seu método main já está definido, também não entendi muito bem qual a sua dúvida quanto a isso.

Bom, por partes, o método abaixo:

[code] public boolean maior(int n1,int n2,int n3){// metodo maior
if ((dia>n1)&&(mes>n2)&&(ano>n3)){

        System.out.println("verdadeiro");  
        return true;  
    }  
    else{  
          
        System.out.println("falso");  
        return false;  
    }  
      
}[/code]

Está com a lógica errada, pois para uma data ser maior que a outra não precisa que o dia, mes, e ano sejam maiores…
pois se estivermos em 22/02/2012 e compararmos com 21/02/2012 teremos uma data maior que a outra mesmo o mes e ano sendo iguais certo?

faça assim crie um int com ano mes e dia concatenados ficaria para o exemplo acima (ano+mes+dia) --> 20.120.222 comparado com 20.120.221

Faça esta alteraçao.

A classe feriado tem um vetor com o nome do feriado, o enunciado pede para que o “feriado tenha um nome”, mude essa classe, primeiramente
deixando a primeira letra “maiúscula” e coloque um atributo do tipo “String” chamado nome para que possa instanciar um feriado qualquer
entendeu?

O metodo obtem meses da classe Intervalo recebe duas datas e retonra a diferenca entre os mesmes

intervalo(d1,d2){

return d1.mes - d2.mes;

}

Certo?

Também acho interessante vc trabalhar com objetos Date em vez de inteiros, até no enunciado já diz…

Estes objetos do tipo Date já tem métodos que vc pode comparar para ver se é maior ou meno dentre outros

Nossa…quando vi o título do tópico…já pensei que ia sair um flamewar gigantesco…kkkkk

Acredito que o professor do individuo deve ter dado a classe:

class data{ int dia; int mes; int ano; }

E esta classe chama-se data, é bom que o amigo também diga se é mesmo esta estrutura da classe… se foi dada pelo seu professor.

Pessoal desculpa a demora em responder, porém vivo no interior do rio e a internet é quase que “discada”. Bom como perceberam sou novato em java, estou estudando a menos de 1 mês. Quanto as variáveis elas precisam ser do tipo int. Quanto aos demais erros vou dar uma olhada agora a tarde e tentar resolve-los …para postar mais tarde…

Obrigado pela atenção…

Bom consegui, eu acho que resolver o problema da lógica referente a comparação de datas, como um dos amigos sugeriu[quote]Está com a lógica errada, pois para uma data ser maior que a outra não precisa que o dia, mes, e ano sejam maiores…
pois se estivermos em 22/02/2012 e compararmos com 21/02/2012 teremos uma data maior que a outra mesmo o mes e ano sendo iguais certo?
faça assim crie um int com ano mes e dia concatenados ficaria para o exemplo acima (ano+mes+dia) --> 20.120.222 comparado com 20.120.221
Faça esta alteraçao.[/quote] Apesar da bagunça nos nomes das variáveis…

O problema agora é com a classe feriado, não consigo fazer como o usuário me sugeriu, [quote]A classe feriado tem um vetor com o nome do feriado, o enunciado pede para que o “feriado tenha um nome”, mude essa classe, primeiramente deixando a primeira letra “maiúscula” e coloque um atributo do tipo “String” chamado nome para que possa instanciar um feriado qualquer,entendeu? [/quote], acho que está com algum problema na sintaxe, o que estou fazendo de errado???

Os demais erros vou ver se conserto a noite…Se puderem me dar uma ajuda fico grato.


public class data2 {// classe data
	
	int dia;
	int mes;
	int ano;
	
	public data2(int dia_,int mes_,int ano_){// contrutor
		
		dia=dia_;
		mes=mes_;
		ano=ano_;
	
	}
    
    public boolean  maior(int n1,int n2,int n3){// metodo maior, usando ano,mes e dia- como sugerido! 
    
		
    	int data_de_teste;
    	int data_de_teste2;
    	
		data2 testando2,testando3; 
		
		testando2= new data2(n3,n2,n1); //instanciando, o que foi passado como parametro, esta bagunçado!!
		testando3= new data2(ano,mes,dia); //instanciando o dia,mes e ano passados
		
				
		data_de_teste=testando3.dia+testando3.mes+testando3.ano;
		data_de_teste2=testando2.dia+testando2.mes+testando2.ano;
		
		    
		System.out.println("A data passada por parametro no metodo maior foi :"+testando2.dia+"/"+testando2.mes+"/"+testando2.ano);//apenas para saber se esta funcionando!
		System.out.println("A data passada foi :"+testando3.dia+"/"+testando3.mes+"/"+testando3.ano);//apenas para saber se esta funcionando!		
    	System.out.println("    ");
    	
    	if ((testando3.dia+testando3.mes+testando3.ano)>(testando2.dia+testando2.mes+testando2.ano)){//testa se a data passada e maior a do metodo maior..
    	
    		System.out.println("verdadeiro");
    		return true;
    	}
    	else{
    		
    		System.out.println("falso");
    		return false;
    	}
    	
    }
    
    public class Feriado { //classe feriado
    
    	String nome_do_feriado;
    	int[] data_do_feriado; 
    	
    	public Feriado(String nome_do_feriado_teste){//construtor
    		
    		nome_do_feriado=nome_do_feriado_teste;
    		
    	}
    
    Feriado testando4;
    data2 data_do_feriado;
    
    data_do_feriado= new data2(10,10,2010);	//Dando problema aqui, provavelmente sintaxe!!!Será algo relacionado a superclasse???
    testando4= new Feriado("Carnaval"); // Dando problema aqui, provavelmente sintaxe!!!	
    	    	    	
    }
    
    public class intervalo { //classe intervalo
    	
    	int[] inicio={31,2,2012};
    	int[] final_periodo={31,7,2012};
    	
    	
    }
    
    //public int obtem_meses(int total){ //metodo para obter meses!!!
    	
    //	total=((final_periodo[1])-(inicio[1]));
    //	return total;
    	
    //}
    
    public static void main(String[] args) {
    	
    	// TODO, add your application code
    	data2 testando;
    	
    	testando= new data2(5,5,2012);// instanciando
    	
    	System.out.println("A data passada foi :"+testando.dia+"/"+testando.mes+"/"+testando.ano);
    	System.out.println("   ");
    	testando.maior(4,4,2012);// passando como parametro
    }
}

Oi,

Na verdade é muito ruim fazer tudo com variáveis do tipo int.

Eu fiz aqui super rápido, sem testar absolutamente nada… Como você já fez uma boa parte, o código tem comentários e qualquer dúvida você pergunta.

OBS: Também não sei se estou certa, fiz super correndo.

Data.java

[code]public class Data
{
int dia, mes, ano;

/**
Resolução p/ item número a:

Crie um construtor para a classe, o qual inicializará os campos desta. 
*/	
public Data(int an_dia, int an_mes, int an_ano)
{
	dia = an_dia;
	mes = an_mes;
	ano = an_ano;
}

/**
Resolução p/ item número b:

Crie nesta classe um método chamado maior(), o qual receberá um objeto do tipo Data 
como parâmetro e retornará verdadeiro se a data do objeto ao qual este método é 
aplicado é maior que o parâmetro passado; caso contrário, retornará falso
*/
public boolean Maior(int an_dia, int an_mes, int an_ano)
{	
	return	(
			an_ano > ano 
				?	true 
				:	an_ano == ano
						?	an_mes > mes
								?	true
								:	an_mes == mes
										?	an_dia > dia
												?	true
												:	false
										:	false
						:	false
										
		);
}

}[/code]

Intervalo.java

[code]public class Intervalo
{
/**
Resolução p/ item número d:

Crie uma classe chamada Intervalo, a qual contém 2 datas que definem um intervalo. 
Por exemplo, podemos ter o intervalo que representa o período letivo de 31 de janeiro a 31 de julho
*/
int[] inicio={31,2,2012};  
    int[] final_periodo={31,7,2012};
    
            
    public Intervalo(int[] an_inicio, int[] an_final_periodo) {
    	inicio = an_inicio;
    	final_periodo = an_final_periodo;
    }
    
    /**
Resolução p/ item número e:

Na classe Intervalo, defina um método chamado obtemMeses(), 
o qual obtém o número de meses contidos no intervalo
*/
    public int ObtemMeses()
    {
    	return ((inicio[1] == 12 ? 0 : inicio[1]) - (final_periodo[1] == 12 ? 0 : final_periodo[1]));
    }

}[/code]

Feriado.java (Não entendi o objetivo dessa classe, até pq ninguem a usa, ou eu não li direito)

[code]public class Feriado
{
/**
Resolução p/ item número c:

Crie uma classe chamada Feriado, a qual representa uma data com um nome em particular.
*/
String feriado;

}[/code]

Principal.java

[code]public class Principal
{
/**
Resolução p/ item número f:

Defina um método main(), numa classe chamada Principal, 
e instancie 2 objetos correspondentes às datas: 8/2/2012 e 31/12/2011
*/
public static void main(String[] args)
{
	Data
	primeira_data = new Data(8, 2, 2012);
	
	Data
	segunda_data = new Data(31, 12, 2011);
	
	/**
	Resolução p/ item número g:
	
	Chame o método maior(), para compará-las, e imprima o resultado na tela.
	*/
	System.out.println("A segunda data (31/12/2011) é maior do que a primeira data (08/02/2012): "+primeira_data.Maior(segunda_data.dia, segunda_data.mes, segunda_data.ano));
	
	/**
	Resolução p/ item número h:
	
	Crie um intervalo a partir dos objetos criados.
	*/
	Intervalo
	intervalo = new Intervalo(new int[]{primeira_data.dia,primeira_data.mes,primeira_data.ano}, new int[]{segunda_data.dia,segunda_data.mes,segunda_data.ano});
	
	/**
	Resolução p/ item número i:
	
	Imprima a quantidade de meses contidos neste intervalo. .
	*/
	System.out.println("A quantidade de meses deste intervalo é: "+intervalo.ObtemMeses());
}

}[/code]

Tchauzin!

Lina, vou testar a noite o código e amanhã vejo se há algum problema ,mudança ou dúvida…
Porém, acredito que tenhamos que fazer mudanças na classe feriado, pois pelo que entendi ela deve receber também uma data, além de um nome…
exemplo: natal, data (25,12,2012). Realmente como vc disse , essa classe não tem um uso claro.

No mais vlw pela atenção e ajuda até agora…Obrigado!

Bom, após testar o código da Lina, resolvi dar uma melhorada na classe feriado , pois apesar dela não ser usada, acredito que da forma que foi implementado não está muito correto…
Porém estou fazendo algo errado e também não consigo imprimir (mostrar a data do feriado e seu nome!!!). O que estou fazendo de errado??? Além disso seria possível criar um vetor para colocar esses feriados??? Linha 72.

public class Data  
{  
    int dia, mes, ano;  
      
    /** 
    Resolução p/ item número a: 
     
    Crie um construtor para a classe, o qual inicializará os campos desta.  
    */    
    public Data(int an_dia, int an_mes, int an_ano)  
    {  
        dia = an_dia;  
        mes = an_mes;  
        ano = an_ano;  
    }  
      
    /** 
    Resolução p/ item número b: 
     
    Crie nesta classe um método chamado maior(), o qual receberá um objeto do tipo Data  
    como parâmetro e retornará verdadeiro se a data do objeto ao qual este método é  
    aplicado é maior que o parâmetro passado; caso contrário, retornará falso 
    */  
    public boolean Maior(int an_dia, int an_mes, int an_ano)  
    {     
        return  (  
                an_ano > ano   
                    ?   true   
                    :   an_ano == ano  
                            ?   an_mes > mes  
                                    ?   true  
                                    :   an_mes == mes  
                                            ?   an_dia > dia  
                                                    ?   true  
                                                    :   false  
                                            :   false  
                            :   false  
                                              
            );  
    }  
}  

class Intervalo  
{  
    /** 
    Resolução p/ item número d: 
     
    Crie uma classe chamada Intervalo, a qual contém 2 datas que definem um intervalo.  
    Por exemplo, podemos ter o intervalo que representa o período letivo de 31 de janeiro a 31 de julho 
    */  
    int[] inicio={31,2,2012};    
    int[] final_periodo={31,7,2012};  
          
                  
        public Intervalo(int[] an_inicio, int[] an_final_periodo) {  
            inicio = an_inicio;  
            final_periodo = an_final_periodo;  
        }  
          
        /** 
    Resolução p/ item número e: 
     
    Na classe Intervalo, defina um método chamado obtemMeses(),  
    o qual obtém o número de meses contidos no intervalo 
    */  
        public int ObtemMeses()  
        {  
            return ((inicio[1] == 12 ? 0 : inicio[1]) - (final_periodo[1] == 12 ? 0 : final_periodo[1]));  
        }  
}  

class Feriado  //   ----> dando problema aqui!!!  <---------
{  
    /** 
    Resolução p/ item número c: 
     
    Crie uma classe chamada Feriado, a qual representa uma data com um nome em particular. 
    */  
        
    int d;
    int m;
    int a;
    String n;
    
    
    public Feriado(int dia_,int mes_,int ano_, String nome_do_feriado){
    	d=dia_;
    	m=mes_;
    	a=ano_;
    	n= nome_do_feriado;
    	    	
    }
    Feriado 
    primeiro_feriado= new Feriado(25,12,2012,"Natal");
        
    Feriado
    segundo_feriado= new Feriado(31,12,2012,"Ano Novo");
 
    System.out.println(Feriado.primeiro_feriado); //dando erro aqui...
    
      
}
  

class Principal  
{  
    /** 
    Resolução p/ item número f: 
     
    Defina um método main(), numa classe chamada Principal,  
    e instancie 2 objetos correspondentes às datas: 8/2/2012 e 31/12/2011 
    */  
    public static void main(String[] args)  
    {
    	
    	  
        Data  
        primeira_data = new Data(8,2 ,2012);  
          
        Data  
        segunda_data = new Data(31,12,2011);  
          
        /** 
        Resolução p/ item número g: 
         
        Chame o método maior(), para compará-las, e imprima o resultado na tela. 
        */  
        System.out.println("A segunda data (31/12/2011) é maior do que a primeira data (08/02/2012): "+primeira_data.Maior(segunda_data.dia, segunda_data.mes, segunda_data.ano));  
          
        /** 
        Resolução p/ item número h: 
         
        Crie um intervalo a partir dos objetos criados. 
        */  
        Intervalo  
        intervalo = new Intervalo(new int[]{primeira_data.dia,primeira_data.mes,primeira_data.ano}, new int[]{segunda_data.dia,segunda_data.mes,segunda_data.ano});  
          
        /** 
        Resolução p/ item número i: 
         
        Imprima a quantidade de meses contidos neste intervalo. . 
        */  
        System.out.println("A quantidade de meses deste intervalo é: "+intervalo.ObtemMeses());
          
    }  
}  

Obrigado pela atenção e ajuda de todos…

Pessoal passei só para agradecer a ajuda de todos, em especial da Lina e do ribclauport e também para deixar o gabarito…
Obrigado a todos…

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;
}
  boolean maior (Data d) {
  if ((this.ano > d.ano) ||
     ((this.ano == d.ano) && (this.mes > d.mes)) ||
     ((this.ano == d.ano) && (this.mes == d.mes) && (this.dia > d.dia)))
        return true;
     return false;
}
}
  class Feriado extends Data {
  String nome;
  public Feriado(int dia, int mes, int ano, String nome) {
  super(dia, mes, ano);
  this.nome = nome;
}
}
class Intervalo {
Data data1;
Data data2;
public Intervalo(Data data1, Data data2) {
// Não é obrigatório de existir na solução
// Colocado para garantir que o atributo data2 sempre
//conterá a maior data do intervalo
if (data2.maior(data1)) {
this.data1 = data1;
this.data2 = data2;
}
else {
this.data1 = data2;
this.data2 = data1;
}
}
public Intervalo(int d1, int m1, int a1, int d2, int m2, int a2) {
// Reusa o construtor acima
this(new Data(d1, m1, a1), new Data(d2, m2, a2));
}
public int obtemMeses () {
int meses = 0;
if (data1.ano == data2.ano)
meses = Math.abs(data1.mes - data2.mes);
else
{
int anos = Math.abs(data1.ano - data2.ano);
if (anos > 1)
meses = (anos - 1) * 12;
if (data2.mes > data1.mes)
meses = meses + data1.mes - data2.mes;
else
meses = (12 - data1.mes) + data2.mes;
}
return meses;
}
}
public class AD1_2012_1 {
public static void main(String[] args) {
Data d1 = new Data(8,2,2012);
Data d2 = new Data(31,12,2011);
System.out.println(d2.maior(d1));
Intervalo i = new Intervalo(d1, d2);
System.out.println(i.obtemMeses());
}
}