Questo programma compila?
class Prova { public static void main(String args[]) { int a=-5; if(a>0); System.out.println("Il numero e' positivo"); } }
Il programma viene compilato senza errori.
Cosa viene stampato?
Viene stampato che il numero è positivo.
if(condizione) istruzione; altre istruzioni;
Nel nostro caso:
if(a>0) ; System.out.println("Il numero e' positivo");
L'istruzione dell'if viene interpretata come istruzione vuota.
Cosa succede: se a è maggiore di zero, esegue l'istruzione vuota. In ogni caso, stampa il messaggio.
Si può sempre scrivere ; in un programma (istruzione che non fa niente).
for(i=0; i<10; i++) ; System.out.println(i);
Viene interpretato come:
for(...) ; System.out.println(i);
Viene fatto il ciclo, ma poi si stampa i solo alla fine.
Usare le parentesi graffe anche per una singola istruzione.
if(a>0) { System.out.println("Il numero e' positivo"); }
Questo risolve anche il problema dell'ambiguità sintattica dell'if
for(i=0; i<10; i++) { System.out.println(i); }
Mettere parentesi in più (se sono nella posizione corretta!) non è un errore.