Ir para o conteúdo
progster

[Resolvido] Dúvida com datas

Mensagens Recomendadas

progster

Bom dia,

Cá estou eu com mais uma dúvida:

package dataseguinte;
public class DataSeguinte {
public static void main(String[] args)
{
int dia,mes,ano;

System.out.print("Introduza o dia!");
dia=Le.umIt();
System.out.print("Introduza o mes!");
mes=Le.umIt();
System.out.print("Introduza o ano!");
ano=Le.umIt();

switch (mes) {
 case 1: case 3: case 5: case 7: case 8: case 10:

				if (dia > 31){
					System.out.print("Mês só tem 31 dias!");
					break;
				}else{
					if (dia == 31){
  dia = 1;
					mes = mes + 1;
					break;
	  }else{
						dia=dia+1;
						break;
					}
				}				
		   case 4: case 6: case 9: case 11:

				if (dia > 30){
					System.out.print("Mês só tem 30 dias!");
					break;
				}else{
					if (dia==30){
					dia = 1;
					mes = mes + 1;
					break;
	  }else{
						dia=dia+1;
						break;
					}				  
				}	  
		   case 12:	  

			   if (dia > 31){
					System.out.print("Mês só tem 31 dias!");					  
				}else{
				   if (dia == 31){
	 dia = 1;
				   mes = 1;
				   ano=ano+1;				  
	 }else{
					   dia=dia+1;
				   }
				}

   //Falta mes de fevereiro

}
System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
 }		  
}

Quando os dias são maiores que 30 e 31, dá-me o seguinte:

Mês só tem 31 dias!Data seguinte:32/12/2000

Até aqui tudo bem, o problema é que só quero que apareça "Mês só tem 31 dias!", sei que me está a escapar qualquer coisa, mas ainda não consegui encontrar.

Outra coisa, e provavelmente é falta de bases matemáticas, mas para o mês de Fevereiro (anos anos bissextos), como posso calcular? Podem dar-me uma dica para ver se lá consigo chegar sozinho?

Agradeço desde já qualquer ajuda que me possam dar.

Editado por progster

Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Boas!

Ve se consegues identar melhor o código assim é difícil de ler o código.

No teu ultimo println tu tens para imprimir a data, é por isso que te aparece a data.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
progster

Viva,

Fiz o "Editar", e lá o código aparece devidamente identado, não sei porque é que no post aparece assim.

Tenho que a lá ter caso contrario não me aparece o resultado que pretendo obter (Data dia seguinte).


Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Tu disseste que quando aparece Mês só tem 31 dias, queres que te apareça só isso certo?

Tens algumas soluções ou tiras o ultimo print dai e pões noutro sitio, ou crias uma variável,

boolean dataCorrecta=true;

Se a data for verdadeira, ou seja, correcta imprimes o ultimo print senão não imprimes

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Como tas a utilizar não, o teu ultimo print esta fora do switch, ou seja, se fazes break dentro do case(a seguir as mensagem de erro) , ele sai das instruções que estão englobadas no switch, e executa as seguintes. A instrução a seguir ao teu switch é imprimir a data

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
progster

Bem, já consegui obter o que queria, para a primeira parte do problema.

package dataseguinte;
public class DataSeguinte {
   public static void main(String[] args)
   {
   int dia,mes,ano;

   System.out.print("Introduza o dia!");
   dia=Le.umIt();
   System.out.print("Introduza o mes!");
   mes=Le.umIt();
   System.out.print("Introduza o ano!");
   ano=Le.umIt();

   switch (mes) {
 case 1: case 3: case 5: case 7: case 8: case 10:

			    if (dia > 31)
			    {
				    System.out.print("Mês só tem 31 dias!");
			    }
			    else
			    {
				    if (dia == 31)
				    {
  dia = 1;
				    mes = mes + 1;
	  }
				    else
				    {
					    dia=dia+1;
				    }
				    System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
				    break; 
			    }
   }
 switch (mes) {
		   case 4: case 6: case 9: case 11:

			    if (dia > 30)
			    {
				    System.out.print("Mês só tem 30 dias!");
			    }
			    else
			    {
				    if (dia==30)
				    {
				    dia = 1;
				    mes = mes + 1;	  
	  }
				    else
				    {
					    dia=dia+1;
				    }
				    System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
				    break;
			    }
 }
  switch (mes) {
		   case 12:	   

			   if (dia > 31)
			   {
				    System.out.print("Mês só tem 31 dias!");					   
			    }
			   else
			   {
				   if (dia == 31)
				   {
	 dia = 1;
				   mes = 1; 
				   ano=ano+1;				   
	 }
				   else
				   {
					   dia=dia+1;						  
				   }
				   System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
				   break;
			    }
  }  
   }  
}

Está só a faltar o mês de Fevereiro (anos anos bissextos), como posso calcular? Podem dar-me uma dica para ver se lá consigo chegar sozinho?


Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
AJBM

Para saberes quantos dias tem o mês de Fevereiro, tens que ver se o ano é bissexto ou não, para isso existem formulas.

bissexto = (ano % 4 == 0) && ( (ano % 100 != 0) || (ano % 400 == 0) );

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
progster

tens aqui como calcular : http://pt.wikipedia.org/wiki/Ano_bissexto

Já tinha visto este link, mas não o vi com olhos de ver, logo não vi os algoritmos.

Bem, código final para quem tiver a mesma dúvida é:

package dataseguinte;
public class DataSeguinte {
   public static void main(String[] args)
   {
   int dia,mes,ano;

   System.out.print("Introduza o dia!");
   dia=Le.umIt();
   System.out.print("Introduza o mes!");
   mes=Le.umIt();
   System.out.print("Introduza o ano!");
   ano=Le.umIt();

   switch (mes) {
 case 1: case 3: case 5: case 7: case 8: case 10:

			    if (dia > 31)
			    {
				    System.out.print("Mês só tem 31 dias!");
			    }
			    else
			    {
				    if (dia == 31)
				    {
  dia = 1;
				    mes = mes + 1;
	  }
				    else
				    {
					    dia=dia+1;
				    }
				    System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
				    break; 
			    }
   }
 switch (mes) {
		   case 4: case 6: case 9: case 11:

			    if (dia > 30)
			    {
				    System.out.print("Mês só tem 30 dias!");
			    }
			    else
			    {
				    if (dia==30)
				    {
				    dia = 1;
				    mes = mes + 1;	  
	  }
				    else
				    {
					    dia=dia+1;
				    }
				    System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
				    break;
			    }
 }
  switch (mes) {
		   case 12:	   

			   if (dia > 31)
			   {
				    System.out.print("Mês só tem 31 dias!");					   
			    }
			   else
			   {
				   if (dia == 31)
				   {
	 dia = 1;
				   mes = 1; 
				   ano=ano+1;				   
	 }
				   else
				   {
					   dia=dia+1;						  
				   }
				   System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
				   break;
			    }
  }
   switch (mes) {
		   case 2:

			  if((ano%4==0) && (ano%400==0 || ano!=0))
			  {
			    System.out.println("Ano bissexto - Fevereiro tem 29 dias");

								    if (dia > 29)
			    {
				    System.out.print("Mês só tem 29 dias!");
			    }
			    else
			    {
				    if (dia==29)
				    {
				    dia = 1;
				    mes = mes + 1;	  
	  }
				    else
				    {
					    dia=dia+1;
				    }
				    System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
				    break;
			    }


			  }
			  else
			  {
			    System.out.println("Ano não é bissexto - Fevereiro tem 28 dias");  

								    if (dia > 28)
			    {
				    System.out.print("Mês só tem 28 dias!");
			    }
			    else
			    {
				    if (dia==28)
				    {
				    dia = 1;
				    mes = mes + 1;	  
	  }
				    else
				    {
					    dia=dia+1;
				    }
				    System.out.println("Data seguinte:"+dia+"/"+mes+"/"+ano);
				    break;
			    }

			  }
}	  
}
}

Obrigado a ambos pela ajuda prestada.


Não resolvo dúvidas por PM.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.