Jump to content
progster

[Resolvido] Dúvida com datas

Recommended Posts

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.

Edited by progster

Não resolvo dúvidas por PM.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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) );

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.