Nota sul punto e virgola

Questo programma compila?

class Prova {
  public static void main(String args[]) {
    int a=-5;

    if(a>0);
      System.out.println("Il numero e' positivo");
  }
}

Risposta

Il programma viene compilato senza errori.

Cosa viene stampato?


Risposta

Viene stampato che il numero è positivo.


Intepretazione della sintassi

  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).


Punto e virgola dopo il while/for

  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.


Soluzione generale

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.