Problemas com if e else

15 respostas
P
tenho um metodo que cria as datas de paamento e salva as mesmas no banco junto com o valor e o numero de cada parcela até ai tudo bem ,meu problema esta no bloco do if e else é que a 1 parcela sempre devera ser paga no dia d hj por exemplo dai as outras d 30 em 30 dias dai se é feita o calculo em uma vez,se o num é igual a um no cod da certo mas se eu faço em mais vezes ele calcula 30 dias para 1 pgto =[ o q estou fazndo errado?
try{
					resultado = comando.executeQuery("select valor_entrada,valor_total,parcelas,observacao,valor_parcela,data_pgto from financeiro where rc_aluno='"+ t2.getText() +"'");
				if(resultado.next())
				{
					JOptionPane.showMessageDialog(null, "Os dados financeiros referentes a este aluno\nja foram cadastrados!");
				}
					
				else{	
					int num=0;
					if(t7.getText()!=null)
						num=Integer.parseInt(t7.getText());
					String ve[]=new String[num];
					int q=0;
					Object key[]=new Object[ve.length];
					resultado = comando.executeQuery("select numero_parcela from parcelas where qntde_parcelas='"+ t7.getText() +"'");
					while(resultado.next())
					{
						ve[q]=resultado.getString(1);
						q++;
					}

					for(int i=0;i<key.length;i++)
					{
						System.out.println(ve[i]+" pos "+i);
						if(num==1)
						{//a 1 parcela é sempre paga no dia da matricula!!!
							
								Date data = dataAtual.getTime();
								DateFormat formata = DateFormat.getDateInstance();
								resultado1 = formata.format(data);
								key[i]=resultado1;
								System.out.println(key[i]);
							
						}
						else if(num<=2)
						{
							dataAtual.add(GregorianCalendar.DATE, 30);
							Date data2 = dataAtual.getTime();
							DateFormat formata2 = DateFormat.getDateInstance();
							resultado2 = formata2.format(data2);
							key[i]=resultado2;
						}
						...

					for(int i=0;i<ve.length;i++)
						comando.executeUpdate("insert into financeiro (rc_aluno,valor_entrada,valor_total,parcelas,observacao,valor_parcela,data_pgto) values ('" + t2.getText() + "','" + t6.getText() + "','"+t5.getText()+ "','"+ve[i] +"','"+ txt.getText() +"','"+ t8.getText() + "','"+ key[i] + "')" );

					JOptionPane.showMessageDialog(null, "Dados financeiros incluidos com sucesso!! ");
				}

				}  catch( SQLException e1){ //trata os erros SQL

					e1.printStackTrace();
					JOptionPane.showMessageDialog(null, this, "Erro Cmdo SQL " + e1.getMessage(), 0 );

				}
obg

15 Respostas

drsmachado

A partir do primeiro else if() a condição está errada.
Você deve colocar assim:

...
else if(num == 2){//para 2 parcelas
//logica
}
else if(num == 3){//para 3 parcelas
//logica
}
...//assim por diante

Pois, quando você coloca “if(num <= 2)” é o mesmo que codificar

if(num == 1 || num == 2)
P

hmm
mas tipo se eu fizer do jeito que tu estas me explicando não terei problema ao salvar isso tipo se eu fizer em 2 vezes vai ser salvo a data da parcela 1 e da 2 ou só da 2?
bah obrigada pela ajuda drsmachado!!
=]

P
drsmachado tentei fazer do jeito que tu disseste mas salvou as 2 datas para daki a 30 dd um pra 04/03 e outra para 03/04 mas olha se fiz certo
if(num==1)
						{//a 1 parcela é sempre paga no dia da matricula!!!
							
								Date data = dataAtual.getTime();
								DateFormat formata = DateFormat.getDateInstance();
								resultado1 = formata.format(data);
								key[i]=resultado1;
								System.out.println(key[i]);
							
						}
						else if(num==2)
						{
							dataAtual.add(GregorianCalendar.DATE, 30);
							Date data2 = dataAtual.getTime();
							DateFormat formata2 = DateFormat.getDateInstance();
							resultado2 = formata2.format(data2);
							key[i]=resultado2;
						}
...
é q eu sou bm atrapalhada =[ obrigada pela ajuda
drsmachado

Então, também é possível separar a parte do primeiro pagamento, mantendo-a fixa para a data atual e, se houver mais parcelas, seguir com tua lógica.
Acho que ficaria mais simples, não?
Assim, não sei se estou sendo claro, tira o if(num == 1) e coloca ele fora (afinal, se for em 1 vez, não altera em nada e se não for, a primeira parcela será paga na data atual, certo?)

if(num == 1){
  //logica para 1 parcela
}else{
  for//segue o codigo
   if(num == 2)
}
P

hmm
acho que deste jeito fica melhor mesmo drsmachado!
bah obrigada
=]

P

drsmachado
tentei dakele jeito mas continua calculando 30 dias para o primeiro pgto
=[
e tipo se eu modifico os if’s gera as datas de 90 em 90 dd
=[
e agora?

Anime

Oi,

Calcule primeiro o valor da entrada e depois gere as parcelas.

Z3U5

creio que num= (numero de parcelas) certo?
se for o seu problema pode estar na logica ou seja:
se o num(numero de parcelas for > 1 ele nao executa o primeiro if.
se for esse o problema vc pode usar:

if (>=1)
eu li o seu codigo sou novo em java mas trabalho com PLC de maquinas e conheco um pouco de logica.

P
Z3U5 pior que desta maneira que tu disseste ele executa o primeiro if mas o problema é que ele so executa ele! tipo cmo posso fazer pra executar ele e os demais if's? obg o cod tinha fikdo
if(num>=1)
						{//a 1 parcela é sempre paga no dia da matricula!!!
							
								Date data = dataAtual.getTime();
								DateFormat formata = DateFormat.getDateInstance();
								resultado1 = formata.format(data);
								key[i]=resultado1;
								System.out.println(key[i]);
							
						}
						else if(num<=2)
						{
							dataAtual.add(GregorianCalendar.DATE, 30);
							Date data2 = dataAtual.getTime();
							DateFormat formata2 = DateFormat.getDateInstance();
							resultado2 = formata2.format(data2);
							key[i]=resultado2;
						}
...
obg =]
drsmachado

Como ele terá de executar a tarefa, ao menos uma vez e, esta vez, deve ser registrada a data atual…
O num equivale ao número de parcelas, portanto, ele já está definido quando você entra no for, correto? Creio que o ideal é colocar os outros ifs dentro do primeiro:

if(num > 0){
 Date data = dataAtual.getTime();  
                                 DateFormat formata = DateFormat.getDateInstance();  
                                 resultado1 = formata.format(data);  
                                 key[i]=resultado1;  
                                 System.out.println(key[i]); 
if(num <= 2){
 dataAtual.add(GregorianCalendar.DATE, 30);  
                             Date data2 = dataAtual.getTime();  
                             DateFormat formata2 = DateFormat.getDateInstance();  
                             resultado2 = formata2.format(data2);  
                             key[i]=resultado2; 
}else if (num <= 3){
...

Assim, ele sempre irá considerar que existe 1 parcela (data atual) e, havendo mais de uma, ele passa para o restante dos ifs, sempre verificando se o número de parcelas.

P

obg drsmachado
=]
vou editar o codigo agora,acredito que deste jeito vai dar certo :lol:

P
drsmachado bah aconteceu um problema tipo agora eu consigo pegar a data atual para primeira parcela,mas todas as outras ficam com a mesma data da primeira=[ fiz algo errado no cod?
if(num>0 )
						{
							
								Date data = dataAtual.getTime();
								DateFormat formata = DateFormat.getDateInstance();
								resultado1 = formata.format(data);
								key[i]=resultado1;
								System.out.println(key[i]);
							
						}
						else if(num<=2)
						{
							dataAtual.add(GregorianCalendar.DATE, 30);
							Date data2 = dataAtual.getTime();
							DateFormat formata2 = DateFormat.getDateInstance();
							resultado2 = formata2.format(data2);
							key[i]=resultado2;
						}
...
tmbm tentei
if(num>0 &&  num<=1)
						{
							
								Date data = dataAtual.getTime();
								DateFormat formata = DateFormat.getDateInstance();
								resultado1 = formata.format(data);
								key[i]=resultado1;
								System.out.println(key[i]);
							
						}
mas dai as datas estavam cmo antes sendo calculadas d 30 em 30 dd =[ obg
Z3U5
if(num>=1)   
                        {//a 1 parcela é sempre paga no dia da matricula!!!   
                               
                                Date data = dataAtual.getTime();   
                                DateFormat formata = DateFormat.getDateInstance();   
                                resultado1 = formata.format(data);   
                                key[i]=resultado1;   
                                System.out.println(key[i]);   
                               
                        }   
                     if(num==2)   
                        {   
                            dataAtual.add(GregorianCalendar.DATE, 30);   
                            Date data2 = dataAtual.getTime();   
                            DateFormat formata2 = DateFormat.getDateInstance();   
                            resultado2 = formata2.format(data2);   
                            key[i]=resultado2;   
                        }
Tenta assim tirei else mudei o primeiro if if(num>=1) e if(num==2) para 2 parcelas se for em mais parcelas if(num>=2)...if(num>=3) etc. desculpa ai drsmachado ter invadido.
drsmachado

Z3U5:

desculpa ai drsmachado ter invadido.

Tranquilo. O objetivo é tentar ajudar, se resolver, maravilha.

Z3U5

Paty seu problema foi resolvido?

Criado 2 de fevereiro de 2011
Ultima resposta 5 de fev. de 2011
Respostas 15
Participantes 4