Problema com método que recebe como parâmetro tres variáveis int

21 respostas
R

Bom pessoal to seguinles do a apostila caelum j11 e estou implementando um código chamado funcionário que eles sugerem.
Meu namoro com o código estava uma doçura até que no Cap. 6 pag 71 eles pedem pra qdo salvar a data de admissão do funcionario evitar que se grave 31/02/anoX por exemplo.
Ai coloquei um IF no metodo “preencheData” mas tudo virou um caos: 31 erros e não consegui sacar o que o compilador ta dando como menssagem de erro.
help please felows!!! :roll:

o main:

class TestaEmpresa {
	public static void main (String[] args){
		Empresa RCY = new Empresa(1000);
		
			Funcionario F1 = new Funcionario("Rafael Muinarczyki");
			F1.setDepartamento("Tecnologia");
			F1.setSalario(6000);
			F1.setRG("[telefone removido]");
			F1.preencheData(28, 02, 2000);
			RCY.adiciona(F1);
			
			Funcionario F2 = new Funcionario("Pedro Paulo");
			F2.setDepartamento("Administracao");
			F2.setSalario(1000);
			F2.setRG("[telefone removido]");
			F2.preencheData(30, 03, 2005);
			RCY.adiciona(F2);
			
			Funcionario F3 = new Funcionario("Peter");
			F3.setDepartamento("Contabilidade");
			F3.setSalario(1000);
			F3.setRG("[telefone removido]");
			F3.preencheData(10, 8, 1989);
			RCY.adiciona(F3);
			
		RCY.totalFuncionarios();
		RCY.mostraEmpregados();
		RCY.verifica(1000);
		RCY.demite("Peter");
		RCY.totalFuncionarios();
		RCY.mostraEmpregados();
	}
}

a classe empresa:

class Empresa {
	private String nome;
	private String cnpj;
	private Funcionario[] empregados;

Empresa (int x){
	empregados = new Funcionario[x];
}
	public Funcionario pegaFuncionario(int posicao){
		return this.empregados[posicao]; 
	}	

	public boolean adiciona(Funcionario ficha){
		for (int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]==null){
				this.empregados[i] = ficha;
				return true;
			}	
		}
		return true;
	}
	
	public boolean totalFuncionarios(){
		for ( int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]!=null){
				System.out.println("Total atual de funcionarios " + this.empregados[i].getIdentificador());
				break;
			}
		}
		return true;
	}

	public boolean mostraEmpregados(){
		for ( int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]!=null){
				this.empregados[i].mostra();
			}
		}
		return true;
	}

	public boolean verifica(double salarioProcurado){
		for (int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]!=null){
				if (this.empregados[i].getSalario() == salarioProcurado){
					System.out.println("temos um funcionario com salario de " + salarioProcurado + " na posicao " + i); 
 
				}
			}
		}
		return true;
	}

	public boolean demite(String nomeProcurado){
		for (int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]!=null){
				if (this.empregados[i].getNome() == nomeProcurado){
					System.out.println("Demitindo" + this.empregados[i].getNome());
					this.empregados[i].setDiminuir();
					this.empregados[i]=null; 
				}
			}		
		}
		return true;
	}
}

a classe funcionario:

class Funcionario {
	private String nome;
	private String departamento;
	private double salario;
	private Data admissao = new Data();
	private String rg;
	private static int identificador;

public Funcionario(){ this.identificador++ ;}

public Funcionario(String Nome){ 
	this.nome = Nome;
	this.identificador++ ;
}
	
	public void setNome(String Nome){this.nome = Nome;}
	public void setDepartamento(String Departamento){this.departamento=Departamento;}
	public void setSalario(int Salario){this.salario=Salario;}
	public void setRG(String RG){this.rg=RG;}
	public void setDiminuir(){this.identificador=this.identificador-1;
	
	public void preencheData(int D, int M, int A){
		if (M != 02 & D>0 & D<32){  // se nao for fevereiro dia pode ser entre 1 e 31
			this.admissao.setDia(D);
			this.admissao.setMes(M);
			this.admissao.setAno(A);
		}
		if (M = 02 & D>0 & D<29){  // se for fevereiro dia tem q ser entre 1 e 28
			this.admissao.setDia(D);
			this.admissao.setDia(M);
			this.admissao.setDia(A);
		}
		else {System.out.println("Voce inseriu valores errados");}
	}
	
	
	public String getNome(){
		return this.nome;
	}

	public double getSalario(){
		return this.salario;
	}
	
	public int getIdentificador(){
		return this.identificador;
	}

	public void bonifica(){
		int anosTrabalhados = 2011 - this.admissao.getAno();
		double bonificacao = this.salario / 100 * anosTrabalhados + this.salario;
		System.out.println("Salario + Bonificacao= " + bonificacao);
		System.out.println("---------------------");
	}
	
	public void mostra(){
		System.out.println("---------------------");
		System.out.println("Nome: " + this.nome);
		System.out.println("Departamento: " + this.departamento);
		System.out.println("Salario " + this.salario);
		System.out.println("RG: " + this.rg);
		System.out.println("Dia de admissao: " + this.admissao.getDia());
		System.out.println("Mês de admissao: " + this.admissao.getMes());
		System.out.println("Ano de admissao: " + this.admissao.getAno());
		System.out.println("---------------------");
	}

}

valeu brothers!!!

21 Respostas

CharlesAlves

Bom não analisei se a lógica está certa ou não pra o que você quer, mas encontrei um erro

public void preencheData(int D, int M, int A){  
        if (M != 02 & D>0 & D<32){  // se nao for fevereiro dia pode ser entre 1 e 31  
            this.admissao.setDia(D);  
            this.admissao.setMes(M);  
            this.admissao.setAno(A);  
        } 
        //na comparação você coloca M = 02 o certo seria M == 02 
        if (M = 02 & D>0 & D<29){  // se for fevereiro dia tem q ser entre 1 e 28  
            this.admissao.setDia(D);  
            this.admissao.setDia(M);  
            this.admissao.setDia(A);  
        }  
        else {System.out.println("Voce inseriu valores errados");}  
    }

quando for declarar variáveis não coloca ela com primeira letra maiúscula pois somente classes possuem a primeira letra maiúscula e totalmente em caixa alta é para constantes.

F

Posta a pilha do erro. É complicado ficar analisando o código todo em busca de onde pode estar o erro.
Aliás, no caso é um erro de compilação, né? Então posta o erro e a linha.

R

ei Charles valeu... nao tinha percebido isso que vc falou.. ou melhor... nem tinha aprendido isso dereito.... implememntei aqui e resolveu
o outro erro que havia era um chave que esqueci de fechar!!!!... ufssss e eu sofrendo por causa de uma desatenção!!
Valeu o interesse tb fernando!
bom galera agora só tem um erro:
Todos funcionarios estao salvando a data de admissão direitinho só o primeiro que poe o ano como dia, e mes e ano ele poe como zero

class Funcionario {
	private String nome;
	private String departamento;
	private double salario;
	private Data admissao = new Data();
	private String rg;
	private static int identificador;

public Funcionario(){ this.identificador++ ;}

public Funcionario(String Nome){ 
	this.nome = Nome;
	this.identificador++ ;
}
	
	public void setNome(String Nome){this.nome = Nome;}
	public void setDepartamento(String Departamento){this.departamento=Departamento;}
	public void setSalario(int Salario){this.salario=Salario;}
	public void setRG(String RG){this.rg=RG;}
	public void setDiminuir(){this.identificador=this.identificador-1;}
	
	public void preencheData(int dia, int mes, int ano){
		if (mes != 02 & dia>0 & dia<32){  // se nao for fevereiro dia pode ser entre 1 e 31
			this.admissao.setDia(dia);
			this.admissao.setMes(mes);
			this.admissao.setAno(ano);
		}
		if (mes == 02 & dia>0 & dia<29){  // se for fevereiro dia tem q ser entre 1 e 28
			this.admissao.setDia(dia);
			this.admissao.setDia(mes);
			this.admissao.setDia(ano);
		}
		else {System.out.println("Voce inseriu valores errados");}
	}
	
	
	public String getNome(){
		return this.nome;
	}

	public double getSalario(){
		return this.salario;
	}
	
	public int getIdentificador(){
		return this.identificador;
	}

	public void bonifica(){
		int anosTrabalhados = 2011 - this.admissao.getAno();
		double bonificacao = this.salario / 100 * anosTrabalhados + this.salario;
		System.out.println("Salario + Bonificacao= " + bonificacao);
		System.out.println("---------------------");
	}
	
	public void mostra(){
		System.out.println("---------------------");
		System.out.println("Nome: " + this.nome);
		System.out.println("Departamento: " + this.departamento);
		System.out.println("Salario " + this.salario);
		System.out.println("RG: " + this.rg);
		System.out.println("Dia de admissao: " + this.admissao.getDia());
		System.out.println("Mês de admissao: " + this.admissao.getMes());
		System.out.println("Ano de admissao: " + this.admissao.getAno());
		System.out.println("---------------------");
	}
}
class TestaEmpresa {
	public static void main (String[] args){
		Empresa RCY = new Empresa(1000);
		
			Funcionario F1 = new Funcionario("Rafael Muinarczyki");
			F1.setDepartamento("Tecnologia");
			F1.setSalario(6000);
			F1.setRG("[telefone removido]");
			F1.preencheData(28, 02, 2000); // pessoal aqui setei dia, mes e ano mas ta salvando 2000 como dia e mes e ano como 0 (nos outros funcionarios        salva direitinho a data de admissão)
			RCY.adiciona(F1);
			
			Funcionario F2 = new Funcionario("Pedro Paulo");
			F2.setDepartamento("Administracao");
			F2.setSalario(1000);
			F2.setRG("[telefone removido]");
			F2.preencheData(30, 03, 2005);
			RCY.adiciona(F2);
			
			Funcionario F3 = new Funcionario("Peter");
			F3.setDepartamento("Contabilidade");
			F3.setSalario(1000);
			F3.setRG("[telefone removido]");
			F3.preencheData(10, 8, 1989);
			RCY.adiciona(F3);
			
		RCY.totalFuncionarios();
		RCY.mostraEmpregados();
		RCY.verifica(1000);
		RCY.demite("Peter");
		RCY.totalFuncionarios();
		RCY.mostraEmpregados();
	}
}
class Empresa {
	private String nome;
	private String cnpj;
	private Funcionario[] empregados;

Empresa (int x){
	empregados = new Funcionario[x];
}
	public Funcionario pegaFuncionario(int posicao){
		return this.empregados[posicao]; 
	}	

	public boolean adiciona(Funcionario ficha){
		for (int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]==null){
				this.empregados[i] = ficha;
				return true;
			}	
		}
		return true;
	}
	
	public boolean totalFuncionarios(){
		for ( int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]!=null){
				System.out.println("Total atual de funcionarios " + this.empregados[i].getIdentificador());
				break;
			}
		}
		return true;
	}

	public boolean mostraEmpregados(){
		for ( int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]!=null){
				this.empregados[i].mostra();
			}
		}
		return true;
	}

	public boolean verifica(double salarioProcurado){
		for (int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]!=null){
				if (this.empregados[i].getSalario() == salarioProcurado){
					System.out.println("temos um funcionario com salario de " + salarioProcurado + " na posicao " + i); 
 
				}
			}
		}
		return true;
	}

	public boolean demite(String nomeProcurado){
		for (int i=0; i<this.empregados.length; i++){
			if (this.empregados[i]!=null){
				if (this.empregados[i].getNome() == nomeProcurado){
					System.out.println("Demitindo" + this.empregados[i].getNome());
					this.empregados[i].setDiminuir();
					this.empregados[i]=null; 
				}
			}		
		}
		return true;
	}
}
class Data {
	private int dia;
	private int mes;
	private int ano;
	
	public void setDia(int Dia){this.dia = Dia;}
	public void setMes(int Mes){this.mes = Mes;}	
	public void setAno(int Ano){this.ano = Ano;}

	public int getDia(){return this.dia;}
	public int getMes(){return this.mes;}
	public int getAno(){return this.ano;}	
	
}
drsmachado
#  
#         if (mes == 02 & dia>0 & dia<29){  // se for fevereiro dia tem q ser entre 1 e 28  
#             this.admissao.setDia(dia);  
#             this.admissao.setDia(mes);  
#             this.admissao.setDia(ano);  
#         }

Camarada, CTRL + C / CTRL + V nervoso, hein?
Repare que em todos você chama o método setDia…

Corrige isso aí

R
drsmachado:
#  
#         if (mes == 02 & dia>0 & dia<29){  // se for fevereiro dia tem q ser entre 1 e 28  
#             this.admissao.setDia(dia);  
#             this.admissao.setDia(mes);  
#             this.admissao.setDia(ano);  
#         }
Camarada, CTRL + C / CTRL + V nervoso, hein? Repare que em todos você chama o método setDia...

Corrige isso aí

puxa cara tu tens toda razão...hehehe maldito vício CTRL + C / CTRL + V
minha cara descolou de tanta vergonha....incrível como to pecando nisso... pelo menos 50% dos meus erros tem sido desatenção!!!!!
muito grato ai machado!!!!

E

Boa percepção drsmachado, e outra coisa que tu vai ter problemas futuramente é nessa parte mesmo, no if anterior

if (mes != 02 & dia>0 & dia<32){ // se nao for fevereiro dia pode ser entre 1 e 31 this.admissao.setDia(dia); this.admissao.setMes(mes); this.admissao.setAno(ano); }cara, os meses 4, 6, 9 e 11 vão até dia “30”, e não até 31, se digitar com erro e for mecher com o Formato Date no banco tu ja tem um belo erro ai, e nem vai perceber,

faz um if antes desse com os 4 meses e se passar por eles ai sim entra nesse…

e também em fevereiro voce tem que validar se é ano BISSEXTO, lembre-se disso.

pode não ser a melhor mas é de confiança… eu utilizo esse funçãozinha bem simples pra validar as datas e funciona coretamente!!

public boolean verificaData(String texto) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); sdf.setLenient(false); try { sdf.parse(texto); return true; } catch (ParseException ex) { return false; } }se converter é válida, ai rertorna true, caso não é false… simples não!!

tira por base e cria a sua, é até mais rapido e simples, e pode usar em varias validações de telas diferentes sem replica-la por todo o projeto!! (claro, isso se no problema não exigir que vocÊ valide isso mês a mês como fez aí…)

e outra coisa, muita atenção com o CONTROL + C / CONTROL + V como disse nosso amigo!! gera muita dor de cabeça, muito mais que fazer um pedacinho a unha!!
falo por experiência própria… rsrsrs

abraços.

drsmachado
rafaelczy:
drsmachado:
#  
#         if (mes == 02 & dia>0 & dia<29){  // se for fevereiro dia tem q ser entre 1 e 28  
#             this.admissao.setDia(dia);  
#             this.admissao.setDia(mes);  
#             this.admissao.setDia(ano);  
#         }
Camarada, CTRL + C / CTRL + V nervoso, hein? Repare que em todos você chama o método setDia...

Corrige isso aí

puxa cara tu tens toda razão...hehehe maldito vício CTRL + C / CTRL + V
minha cara descolou de tanta vergonha....incrível como to pecando nisso... pelo menos 50% dos meus erros tem sido desatenção!!!!!
muito grato ai machado!!!!

Camarada, todo mundo já cometeu erros desta natureza.
O aprendizado é assim.
Vergonha do que?
Você está programando, acha que tudo vai ficar certo, mas quando um erro aparece, fica horas em cima, olha o código e nada aparece. É normal passar desapercebido, pois o foco é corrigir o erro.
Essa questão vai além.
Sempre digo que precisamos ver além do problema, ver antes e depois dele.

Você está fazendo um curso, é normal, previsível e, principalmente, esperado que você erre.
Com o tempo vai se acostumar a perceber erros dessa natureza e cometerá outros.
Assim é a vida.

R

galera como vcs podem ver mais acima, o metodo preencheData eu criei uma condição IF para estipular qdo em Fereiro só pode ter 28 dias e outros meses até 31 dias pode ter e coloquei um ELSE para APENAS na himpotese do usuario colocar por exemplo 31/02/2005 ele imprimir uma messagem de erro sobre entrada de valores invalidos. O problema é que ele ta imprindo a menssagem de erro mesmo qdo os dados entram dentro dos parametros. Moral: Pensei que sabia usar IF/ELSE e nao to sabendo.
Alguma indicação de como tenho de usar ai galera pra ele so dar messagem de erro se nao entrar em nehum dos dois IFs do metodo ?

drsmachado

Emerson_sannin:
Boa percepção drsmachado, e outra coisa que tu vai ter problemas futuramente é nessa parte mesmo, no if anterior

if (mes != 02 & dia>0 & dia<32){ // se nao for fevereiro dia pode ser entre 1 e 31 this.admissao.setDia(dia); this.admissao.setMes(mes); this.admissao.setAno(ano); }cara, os meses 4, 6, 9 e 11 vão até dia “30”, e não até 31, se digitar com erro e for mecher com o Formato Date no banco tu ja tem um belo erro ai, e nem vai perceber,

faz um if antes desse com os 4 meses e se passar por eles ai sim entra nesse…

e também em fevereiro voce tem que validar se é ano BISSEXTO, lembre-se disso.

pode não ser a melhor mas é de confiança… eu utilizo esse funçãozinha bem simples pra validar as datas e funciona coretamente!!

public boolean verificaData(String texto) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); sdf.setLenient(false); try { sdf.parse(texto); return true; } catch (ParseException ex) { return false; } }se converter é válida, ai rertorna true, caso não é false… simples não!!

tira por base e cria a sua, é até mais rapido e simples, e pode usar em varias validações de telas diferentes sem replica-la por todo o projeto!! (claro, isso se no problema não exigir que vocÊ valide isso mês a mês como fez aí…)

e outra coisa, muita atenção com o CONTROL + C / CONTROL + V como disse nosso amigo!! gera muita dor de cabeça, muito mais que fazer um pedacinho a unha!!
falo por experiência própria… rsrsrs

abraços.

Bom, nesse ponto, vou dar um salvo conduto ao rafaelczy.
Por se tratar de um exercício do curso, o erro é de quem pede para fazer uma classe com tais métodos.
Eu fiz isso em C++, na faculdade, aliás, mais do que verificar se o mês tinha 28, 29, 30 ou 31, tive que criar um calendário permanenete que, dado qualquer data (calendário cristão, antes ou depois de Cristo), tinha que retornar o dia da semana a que se referia (até descobri que o dia do nascimento de Jesus Cristo, 25/12/01 foi uma quarta-feira).

Para complementar tua dica, todo ano bissexto é um múltiplo de 4 (2000, 2004, 2008, 2012, 2200…).

E

simples:

if (mes != 02 & dia>0 & dia<32){ // se nao for fevereiro dia pode ser entre 1 e 31 this.admissao.setDia(dia); this.admissao.setMes(mes); this.admissao.setAno(ano); } faltou um "else" aqui, if (mes == 02 & dia>0 & dia<29){ // se for fevereiro dia tem q ser entre 1 e 28 this.admissao.setDia(dia); this.admissao.setDia(mes); this.admissao.setDia(ano); } else {System.out.println("Voce inseriu valores errados");}

ficaria assim:

if (mes != 02 & dia>0 & dia<32){ // se nao for fevereiro dia pode ser entre 1 e 31 this.admissao.setDia(dia); this.admissao.setMes(mes); this.admissao.setAno(ano); } else if (mes == 02 & dia>0 & dia<29){ // se for fevereiro dia tem q ser entre 1 e 28 this.admissao.setDia(dia); this.admissao.setDia(mes); this.admissao.setDia(ano); } else {System.out.println("Voce inseriu valores errados");}

R

really thank’s emerson:
Pensei correto - nao to sabendo implementar o IF/ELSE direito e seu exemplo cita isso.
Qto a questão de ano bissexto todas consideração relativas a secularidade meu interesse aqui foi apenas colocar um validaçãozinha bem simples como a apostila pedia.
Mas a dica tua e do machado me chamaram atenção pra uma implementação mais complexa e utilizavel no meio profissional - me interessei e vou tentar fazer um metodo assim mas creio que o cerebelo vai fumaçar…rssss

E

porque: se vc entra no primeiro if(que valida fevereiro) não pode entrar no segundo e se vc colocar 100 IFs sequentes sem o ELSE (senao (em portugol (linguagem usada para aprendizado de estruturação e lógica) ) ele vai passar por todos, não é que vocÊ não sabe usar, sabe sim e esta bem estruturado, é apenas algo que tu pega o jeito com o tempo, uma coisinha chamada experiÊncia.

resumindo, entrou no primeiro, não pode entrar nos sequentes da mesma validação…

if(){ }else if(){ }else if(){ }else{} // isso é uma 'corrente'. uma única validação formada de varias validações sequentes..

ao fazer:

if(){ } if(){ // aqui vc perde a sequencia e inicia uma nova, não se importando se entrou no primeiro ou não!!!! }else{}

e só pra complementar, eu entendi sim machado e concordo com vc, só dei a dica pq um dia se DEUS quiser teremos mais um profissional em desenvolvimento de software, e com certeza irá precisar disso, só disse como uma dica mesmo, assim quando se deparar com o problema talvez se lembre. rsrsrs

R

emerson hei men to estudando de 4 a 8 horas por dia almost every single day !!!
espero que esse “um dia” que vc citou seja daqui uma ano como programador java estagiário (embora o salario que busco necessita de 2 a 3 anos)!
Estou feliz pq sinto que estou andando rápido, dou umas travadas mas acho que o meu processador tem capacidade pra essa empreitada (até acho que ravo pouco referente a pouca bagagem q tenho, poucos meses)
outros vao a jogos e baladas mas o projeto de java men aqui ta igualzinho os paulista viciados em trab e estudo.
obrigado pela força ai guys
very good to know i’m not alone!

E

right…

‘um dia’ pode ser na segunda-feira já cara, rsrsrs, é isso aí trabalho duro e empenho sempre produziram bons frutos!!!

R

Emerson_sannin:
right…

‘um dia’ pode ser na segunda-feira já cara, rsrsrs, é isso aí trabalho duro e empenho sempre produziram bons frutos!!!

putz cara
fucken coo menl, i never expected to hear something like this so soon, great encourage to me!!! hahahah

R

Emerson_sannin:
Boa percepção drsmachado, e outra coisa que tu vai ter problemas futuramente é nessa parte mesmo, no if anterior

if (mes != 02 & dia>0 & dia<32){ // se nao for fevereiro dia pode ser entre 1 e 31 this.admissao.setDia(dia); this.admissao.setMes(mes); this.admissao.setAno(ano); }cara, os meses 4, 6, 9 e 11 vão até dia “30”, e não até 31, se digitar com erro e for mecher com o Formato Date no banco tu ja tem um belo erro ai, e nem vai perceber,

faz um if antes desse com os 4 meses e se passar por eles ai sim entra nesse…

e também em fevereiro voce tem que validar se é ano BISSEXTO, lembre-se disso.

pode não ser a melhor mas é de confiança… eu utilizo esse funçãozinha bem simples pra validar as datas e funciona coretamente!!

public boolean verificaData(String texto) { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); //SimpleDateFormat é uma classe pra datas? essa nao conhecia. tal de bibliotecas? sdf.setLenient(false); //aqui tu crieou um setter chamado Lenient. pq esse nome e pq passa com parametro "false" ? try { // try nao aprendi ainda, o que ele faz aqui ? sdf.parse(texto); // aqui tu chama um metodo chamado parse que é do objeto sdf, mas o que esse metodo faz e que nome é esse? return true; // aqui pelo q vi retorna true se a passagem de parametro texto for aceita } catch (ParseException ex) { // nao entendi qse nada return false; // aqui retorna false se a passagem de parametro for aceita? } }se converter é válida, ai rertorna true, caso não é false… simples não!!

tira por base e cria a sua, é até mais rapido e simples, e pode usar em varias validações de telas diferentes sem replica-la por todo o projeto!! (claro, isso se no problema não exigir que vocÊ valide isso mês a mês como fez aí…)

Coloquei comentarios no codigo pra citar o que nao entendi emersom
e outra coisa, muita atenção com o CONTROL + C / CONTROL + V como disse nosso amigo!! gera muita dor de cabeça, muito mais que fazer um pedacinho a unha!!
falo por experiência própria… rsrsrs

abraços.

R

emersom
comentei no post acima, o codigo da tua função nas partes onde nao entendi
thank’s

E

Vamos lá (corrijam-me se estiver errado em algo...),

public boolean verificaData(String texto) {  
                SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); //SimpleDateFormat é uma classe pra datas? essa nao conhecia. tal de bibliotecas?

                //Isso , é uma classe que permite (como o próprio nome ja diz) formatar uma string em formato de data,

                sdf.setLenient(false);  //aqui tu crieou um setter chamado Lenient. pq esse nome e pq passa com parametro "false" ?

                //Lenient : brando, suave; setando false vc diz ao sdf que ele deve verificar se data esta formatada exatamente como setou na String: "dd/MM/yyyy", nunca me aprofundei nisso então não sei dizer as outras possibilidades do uso dessa belezinha, mas assim ela "exige" a String formatada de acordo com o parametro passado inicialmente!

                try {                         // try nao aprendi ainda, o que ele faz aqui ? 

                //try: é uma zona onde todos os comandos devem funcionar corretinhos (como???????) seguindo o exemplo, caso a conversão da String 'texto' não aconteça sem erro ele simplesmente PARA o bloco de comando ali mesmo e aborta a sequencia, caindo assim no CATCH(), aqui levamos a tradução ao  da letra: "tente", se não conseguir realizar tudo sem erro, entra no CATCH, ou seja estruturação similar, veja bem, eu disse similar ao IF(){}ELSE{} no ponto onde se atender tudo que esta em try{} não entra em catch, se errar dentro de try{} entra no catch{}, 

                   sdf.parse(texto);    // aqui tu chama um metodo chamado parse que é do objeto sdf, mas o que esse metodo faz e que nome é esse?

                   // parse : analisar, correto? é por ai, na verdade ele valida e 'converte' a String 'texto' em Date, tento o valor na sdf como data; é aqui que toda a mágica acontece, graças ao try{}, se a conversão e analise tiver sucesso continua e retorna o true, caso não, para por aqui e cai no CATCH que por sua vez executa o seu bloco de comando;

                   return true;           // aqui pelo q vi retorna true se a passagem de parametro texto for aceita  --- exato;
                }  
                catch (ParseException ex) { // nao entendi qse nada -- ja coloque o que é, agora, o catch faz muito mais que simplesmente apenas atender o bloco de comando se falhar no try{}, se verdadeiro valor está no retorno dos erros, o " (ParseException ex)" retorna o erro que ocorreu, nesse caso desnecessário, mas em algo mais específico permite você sabe e até informar o erro que ocorreu com esse tal de "ex" que é um objeto  ParseException.

                   return false;              // aqui retorna false se a passagem de parametro for aceita?  -- o inverso,  entra no Catch se ocorreu algum erro na passagem de parâmetro..
                }  
            }  
//lembrando, if(){}else{} não tem nada a ver com try{}Catch(exception..){}, apenas exemplifiquei a pra tu entender como funciona quando entra ou não em Catch,

//if e else é validação apenas, aqui é basicamente pra sua aplicação não "travar" no meio do processo se o usuário, função não se comportar adequadamente.. a grosso modo falando!!

Mas assim, "não passemos o carro na frente dos bois", foca na tua aplicação atual, com o tempo e o curso vc verá essa belezinha, não fica martelando isso não pq vai emaranhar tudo, de cara ninguém que esta iniciando entende.. sei que terão até criticas, mas isso tbm vai ajudar na curiosidade, e quando teu professor chegar nessa etapa, vc terá um conceito de como funciona e entenderá mais rápido.

as vezes usamos um código que não entendemos, aprenderemos sua funcionalidade na prática e nas 'enroscadas' da vida como até falou o machado. kkk

isso vc verá com maior clareza futuramente, quando for realizar consulta em banco, fazer validações loucas como essa de data que geralmente nem a gente que faz entende direito mas sabe que funfa.... kkkk (brincando), mas relaxa, curte teu aprendizado...

se não entender algo pode pedir, sei que o pessoal vai explicar até melhor e objetivamente que eu. mas ja ajudará um pouco!!

volto a dizer, passo a passo,

abraços e bom aprendizado!

R

ai emersom bela explicação
estudei até 13:30 hoje e voltei agora 17:30 e li tudo que tu pôs nao entendo qse tudo com excessão do “catch (ParseException ex)” pq nao entendi esse parametro.
mas isso foi numa unica lida, vou ler e reler.
Outra coisa, essa classe “SimpleDateFormat” seria lega poder ver os metodos dessa classe pra o intestino do metodo que valida e outros tantos qtos tiver. Tem como?
no mais valeu, grande dica de validação pra mais pra frente cara!
A proposito… o capim anda curto aqui e pagar prof nao funfa- meu estudo é no vai cavalo mesmo: sozinho em casa com a apostila, ou aprendo ou a chicotada da consciencia no cerebro doi e manda superar!!!.. rsss
Vou almoçar e dar uma sentada pra estuda mais um pouco
valeu

E

beleza… vou dar uma saida… mas da uma olhada nos links abaixo

http://download.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

http://download.oracle.com/javase/1,5.0/docs/api/java/text/SimpleDateFormat.html

tem muita coisa… e ja pratica no Inglês… abraços e depois eu tento explicar o CATCH diferente!!

R

Bom Emerson dei uma olhada la mas percebi que passa por certos aspectos como patterns e outros mais.
Acho mais interessante manter meu foco por hora no sequencial da apostila e assim que ela entrar mais nesse campo eu me envolver com isso (afinal seguir a sequencia da apostila e entender esses outros aspectos ao mesmo tempo is not possible).
Mas em breve ja chego la. Estou entrando em polimorfismo e acho que essas bibliotecas ja vão ser abordadas no prox capitulo.
Really thank’s
ta documentadinho já tuas sugestãoes!

Criado 23 de setembro de 2011
Ultima resposta 24 de set. de 2011
Respostas 21
Participantes 5