Newsgroup: it.comp.java
Titolo: perchè devo mettere else??????

guardate il pezzo di programma java qui sotto.Data una data in ingresso il
programma calcola la data successiva.L'ho fatto con if-else ma non capisco
perchè devo mettere else in un punto del programma.Intanto guardatelo:
se è il 31/12 allora il giorno (della data successiva) sarà 1,il mese sarà
1 e l'anno sarà l'anno +1.
Poi c'è un'altra condizione:se il giorno è 31 ma il mese non è uguale a 12
allora il giorno è uguale a 1 e il mese viene aumentato di 1.
Perchè prima di quest'ultima condizione devo metterci else?
Se non ce lo metto quando  provo il programma e come data in ingresso
inserisco il 31/12 mi stampa la data 2 volte.Ma perchè?Il programma non
dovrebbe fare così(senza else):
controlla se inserisco g=31 e m=12.Bene,li ho inseriti quindi augura
felice anno nuovo e stampa su schermo la data.
poi controlla:i g=31 e m!=12.Allora: i giorni sono 31 ma i mesi sono
12,quindi dovrebbe saltare il pezzo con la if "if(g==31&m!=12){" o no?
invece senza else mi scrive la data 2 volte.
if(g==31&m==12){
                            g=1;
                            m=1;
                            a=a+1;
                            JOptionPane.showMessageDialog(null,"felice
anno nuovo!!!!!");
                            JOptionPane.showMessageDialog(null,"la data
successiva è "+g+" / "+m+" / "+a);
                        }
                        else{ //PERCHè VA ELSE?????????
                        if(g==31&m!=12){
                            g=1;
                            m=m+1;
                            JOptionPane.showMessageDialog(null,"la data
successiva è "+g+" / "+m+" / "+a);
                        }
scusate il maiuscolo ma così evidenziavo l'else strana :)
cmq perchè senza else mi stampa la data 2 volte?
 
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

                         else{ file://PERCHè VA ELSE?????????
il valore di m è 1
quindi è diverso da 12


scusami mi è sfuggito g
quindi ora non capisco nemmeno io

grazie mille!!!
quindi se io devo semplicemente aumentare un valore come nel caso "aumenta
giorno di 1" allora posso usare tranquillamente aumentare il valore tra le
parentesi delle if,ma se cambio totalmente valore devo metterlo tra le
parentesi dell'else?
ancora grazie!


forse ti ho creato un pò di confusione
vediamo di spiegare meglio
if(m==12)
{
  m=1;
  in questo blocco if
  se aggiungi altre valutazioni
  sulla variabile *m*
  la variabile *m* ha già assunto il valore 1
}
else
{
  questo blocco else viene eseguito
  solo se a il valore di *m* inizialmente è diverso da 12
}
quindi se *m* è uguale a 12
il blocco else non viene
valutato, anche sè il valore di *m*
viene cambiato nel blocco if
in poche parole
nel blocco if puoi fare ciò
che vuoi sulla variabile *m*
in ogni caso il blocco else
non verrà eseguito sè inizialmente
il valore di *m* era 12
spero di non aver creato altra confunsione
ciao antonio

 if(g==31&m==12){
occhio che con "&" fai la and _bitwise_
prova a scrivere g==31 and m==12...
ciao
Fabio

 ciao antonio
no,no,quello lo sapevo già.Cmq intendevo se preso da tastiera il mese m,
ad esempio prendiamo il mese 12:
if (m==12){
    m=1;
  }
if(m!=4){
   m=m+1;
}
Allora nel primo if m==12 è vero,perciò il pc esegue quello tra le if
assegnando un nuovo valore a m, cioè 1.
Poi il pc valuta la seconda,cioè m deve essere diverso da 4.
Quanto vale adesso m? 1 o 12?dovrebbe valere 1 no?
E come faccio se volessi mantenere sempre lo stesso valore di m preso da
tastiera?
devo fare un programma che mi calcoli la data successiva di una data
espressa in gg/mm/aa ma vengono tante if e tante else.Senza contare che
devo tener conto se l'anno è bisestile o meno.....
ciao



se per data successiva intendi il giorno seguente:
se java ha una funzione per
verificare se una data è una data
valida con 1 while e 2 if te la cavi
input d,m,y
d = d + 1;
while( verifica_data(d,m,y) == false)
{
  d = d + 1;
  if(d > 31){d = 1; m = m + 1;}
  if(m > 12){m = 1; y = y + 1;}
}
print d,m,y
teoricamente dovrebbe funzionare
poi non lo so se nun và
ciao

 ciao
Ma usare le classi standard di java puzzava proprio?
import java.util.*;
import java.text.*;
public class Data{
	public static void main(String[] args)throws Exception{
		//data di esempio
		String d = "31/12/1998";
		Date data = null;
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		try{
			data = sdf.parse(d);
		}catch(ParseException pe){
			System.out.println("Il formato della data non e' corretto.");
		}
		GregorianCalendar gc = new GregorianCalendar();
		gc.setTime(data);
		//data successiva di un giorno
		gc.set(Calendar.DAY_OF_MONTH,gc.get(Calendar.DAY_OF_MONTH)+1);
		System.out.println(sdf.format(gc.getTime()));
	}
}

 Ma usare le classi standard di java puzzava proprio?
Gia'... io poi avrei fatto cosi'
GregorianCalendar gc=new GregorianCalendar(anno,mese,giorno);
gc.add(GregorianCalendar.DATE,1);
da qui gc.get(....i vari campi...);
e te la cavi in 5 righe.
Saluti
CarMas

si, piu' semplice, ma con l'altro sistema si evitava di fare il parsing
della stringa di input per estrarre anno,mese e giorno
comunque, il bello di java e' (tra le altre cose) la megalibreria di
classi a disposizione, basterebbe solo dare un'occhiata ai javadoc.....


un attimo un attimo....forse (anche senza forse) mi credete stupido perchè
vado a complicarmi la vita mettendo un'infinità di if ed else quando me la
cavo in 3 righe come avete detto voi.....ma dato che l'esercizio è sulle
if non vi sembrava un controsenso usare le tabelle di java??????
ciao!


ah, ma e' un esercizio?
mmhhh.. che brutto modo di imparare... ;-)
comunque sarebbe meglio, per semplificare le cose a chi da un aiuto
spiegare un attimino anche il contesto di quello che si chiede,
altrimenti uno tira fuori magari una soluzione semplice e chiara dopo
aver cercato di capire cosa voleva chi ha domandato e invece non va
bene perche' ci sono delle ragioni a monte, non dette che la
invalidano.
Se tu avessi specificato subito cosa dovevi fare, saresti stato
indirizzato meglio, prima e in modo piu' corretto.
Anche se sembra che sia un po' astioso (mammma che brutto termine) non
volevo esserlo, ma solo darti un suggerimento per la prossima volta che
chiedi su un newsgroup.
Ciao!

 mmhhh.. che brutto modo di imparare... ;-)
e lo dici a me???? :-(

si,quello č vero!cmq usare if ed else č leggermente incasinato ed č da
poco che programmo (se si puň definire cosě la poca roba che sto
facendo...)!


input d,m,y
[...]
d = d + 1;
while( verifica_data(d,m,y) == false)
{
  d = d + 1;
  if(d > 31){d = 1; m = m + 1;}
  if(m > 12){m = 1; y = y + 1;}
}
[...]
print d,m,y
se stai seguendo la strada degli if ed else
per valutare la validità di una data
è necessaria spiegazione -> verifica_data(...):
30 febbraio 2005 è una data non valida
per sapere sè è una data non valida
l'unico modo che conosco per sapere ciò
è quello di utilizzare 2 algoritmi di
conversione:
DataCivile = 30/02/2005
DataCivile   -> DataGiuliana = 2453431,5
DataGiuliana -> DataCivile   = 02/03/2005
sè le due date sono differenti
la data iniziale 30/02/2005
non è una data valida
se ti interessano i due algoritmi
te li posto
nb. sono scritti in QBasic
sono variabili e numeri
di facile conversione
fammi sapere
ciao antonio