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.