dúvida com funções

19 respostas
LeandroSantanaDiniz

Oi bom dia pessoal,

Gostaria de uma ajuda de vcs … Preciso fazer isso :

String “01/01/2010” ----> int dia int mes int ano;

sei que tenho que usar uma funcao que muda String p int … e uma funcao de separacao …

agora quais ?

19 Respostas

Rodrigo_Sasaki

Método que “quebra a String” -> split(String)

Método estático que converte de String para int -> Integer.parseInt(String)

Obs: o método split(String) recebe uma expressão regular, e não uma String literal.

LeandroSantanaDiniz
public class Data
{
	private int dia;
	private int mes;
	private int ano;
	
	
	public void data(String data)
	{
		dataValida(data);
	}
	
	private void dataValida(String data)
	{
		System.out.println(data);
	}
	
}
public class TesteData
{

	public static void main(String[] args)
	{
	
		Data x = new Data();
		
		x.data("08/03/2012");
	
	}

}

eu preciso tratar essa String… o que eu devo fazer primeiro ??? =\

Rodrigo_Sasaki

Você leu o que os métodos que eu indiquei acima fazem ?

LeandroSantanaDiniz

li sim, olha só o que já consegui, só que a saída ainda não é a data certa, n sei pq…

public class Data
{
	private int dia;
	private int mes;
	private int ano;
	
	
	public void data(String data)
	{
		String[] separacao = data.split("/");
		
		if(separacao.length != 3) return;
				
		this.dia = Integer.parseInt(separacao[0]);
		
		this.mes = Integer.parseInt(separacao[1]);
		
		this.ano = Integer.parseInt(separacao[2]);
		
		dataValida(this.dia, this.mes, this.ano);
	}
	
	private void dataValida(int dia, int mes, int ano)
	{
		System.out.println(dia + mes + ano);
	}
	
}
public class TesteData
{

	public static void main(String[] args)
	{
	
		Data x = new Data();
		
		x.data("08/03/2012");
	
	}

}
Rodrigo_Sasaki

qual a saída? 08032012 ?

só uma observação, seus métodos tem nomes confusos. você usa um método dataValida(int, int, int) e o que ele faz é imprimir. Não sei se é só para testes, mas fica a observação.

LeandroSantanaDiniz

achei o motivo, rs

System.out.println(dia + "" + mes + "" + ano);
Rodrigo_Sasaki

LeandroSantanaDiniz:
achei o motivo, rs

System.out.println(dia + "" + mes + "" + ano);


Ah sim, não me atentei a isso também, ele retornava o número somado…

Seu objetivo era somente remover o ‘/’ ? se fosse só isso existem maneiras muito mais fáceis de fazê-lo.
Sendo que concatenando os seus atributos int com “” você está gerando uma String novamente.

LeandroSantanaDiniz

Bem reparado, é que eu gosto de usar os artefatos que as metodologias ágeis nos propõe :smiley:

Agora preciso montar um algoritmo para validar isto … xD

agora o dia tá 1 e não 01, tem problemas ?

LeandroSantanaDiniz

digaoneves:
LeandroSantanaDiniz:
achei o motivo, rs

System.out.println(dia + "" + mes + "" + ano);


Ah sim, não me atentei a isso também, ele retornava o número somado…

Seu objetivo era somente remover o ‘/’ ? se fosse só isso existem maneiras muito mais fáceis de fazê-lo.
Sendo que concatenando os seus atributos int com “” você está gerando uma String novamente.

eu to imprimindo na tela pra teste mesmo ! :smiley:

Rodrigo_Sasaki

Não sei hehehe… depende do que você quer fazer.

LeandroSantanaDiniz

Não sei hehehe… depende do que você quer fazer.

agora no método valida to pensando em verificar se os meses vao ate 12 e os dias ate 31 algo desse tipo… rs

Rodrigo_Sasaki

Entendi, bom nesse caso 1 ou 01 não faz diferença, se for comparação matemática o “zero a esquerda” não vale nada mesmo… por isso a expressão hehehe…

Você pode validar datas com expressões regulares também, ja pensou nisso? Dependendo da sua necessidade, pode ser uma solução mais simples.

LeandroSantanaDiniz

Entendi, bom nesse caso 1 ou 01 não faz diferença, se for comparação matemática o “zero a esquerda” não vale nada mesmo… por isso a expressão hehehe…

Você pode validar datas com expressões regulares também, ja pensou nisso? Dependendo da sua necessidade, pode ser uma solução mais simples.

legal Rodrigo, pra vc ter ideia eu to estudando Java pela apostila, daí tem um exercicio que pede pra eu verificar datas, por ex 31 de fevereiro rs…

Isso daí ainda nem vi no livro, será q é legal eu já aprender isso ?

Rodrigo_Sasaki

Não vejo problema, como é um exercício mais de lógica do que da linguagem, eu particularmente acho interessante você tentar resolvê-lo.

LeandroSantanaDiniz

Não vejo problema, como é um exercício mais de lógica do que da linguagem, eu particularmente acho interessante você tentar resolvê-lo.

tem algum link bom aí pra mim ? XD

Rodrigo_Sasaki

link relacionado a que ?

LeandroSantanaDiniz

expressões regulares

LeandroSantanaDiniz

oi, acho que acabei, ficou assim:

Data.java

public class Data
{
	private int dia;
	private int mes;
	private int ano;
	
	
	public void data(String data)
	{
		String[] separacao = data.split("/");
		
		if (separacao.length != 3) return;
				
		this.dia = Integer.parseInt(separacao[0]);
		
		this.mes = Integer.parseInt(separacao[1]);
		
		this.ano = Integer.parseInt(separacao[2]);
		
		dataValida();
	}
	
	private void dataValida()
	{
	
		if (this.dia > 31) return;
		if (this.mes > 12) return;
		if ((this.mes == 4 || this.mes == 6 || this.mes == 9 || this.mes == 11) && (this.dia > 30)) return;
		
		
		if (anoBissexto(this.ano))
		{
			if (this.dia > 29 && this.mes == 2) return;
			
		}else
		{
			if (this.dia > 28 && this.mes == 2) return;
		}
		
		
		System.out.println("----------------------------");	
		System.out.println(this.dia + "/" + this.mes + "/" + this.ano);
		System.out.println("Data Válida");
		System.out.println("----------------------------");
		
		
	}
	


	private boolean anoBissexto(int ano)
	{
		
		if(this.ano % 4 != 0) return false;
		return true;
	}	
	
}

TesteData.java

public class TesteData
{

	public static void main(String[] args)
	{
	
		Data x = new Data();
		
		x.data("01/01/1991");
	
	}

}

o que acham? usei muito código ??? Abraçoss !!!

Rodrigo_Sasaki

Link sobre Expressões Regulares:

http://aurelio.net/regex/

Eu li um livro desse cara que é muito simples e fácil de ler, mas isso não invalida o conteúdo, que é muito bom.

Criado 7 de junho de 2012
Ultima resposta 7 de jun. de 2012
Respostas 19
Participantes 2