Console 6: if, while, ==


   Il nostro programma per calcolare l'area e il perimetro di un rettangolo è abbastanza soddisfacente, ma ha un piccolo difetto: appena eseguito, esce (cioè se si volesse rifare i conti per un altro rettangolo, bisognerebbe reinizializzare tutto). Cerchiamo di sistemare questo inconveniente.

L'idea è, alla fine, di chiedere all'utente: "Un altro? (0) Uscire? (1)"
Se l'utente immette 0, allora il programma va avanti, altrimenti, se l'utente immette 1, il programma termina.
Bisogna quindi decidere cosa fare, in base alla risposta dell'utente. Per questo si può usare l'operatore if

if in inglese significa: se

L'operatore if funziona così:

if(condizione){
 	//Blocco A: codice da eseguire se condizione è vera
	}
//se condizione falsa, il blocco A viene ignorato e si continua da qui



Per esempio:
  if(piove){
	prendere l'ombrello;}
//se non piove, ignoro il blocco precedente e continuo da qui

Bene, ma cos'è una condizione per il computer? Può essere, per esempio, di testare se una variabile int ha o meno un certo valore, questo si fa con l'operatore ==   (operatore di uguaglianza, da distinguere da =, operatore di assegnazione). Quindi per esempio:
int t;
//
if(t == 1){ uscire;}

Il nostro programma potrebbe essere così:


public class AreaPeriRett{

public static void main(String[] arg){

int a,b;     //i lati del rettangolo
int t;       //per testare, alla fine, la risposta dell'utente

a = Leggi.Risposta("Inserisci il primo lato: ");
b = Leggi.Risposta("Inserisci il secondo lato: ");
System.out.println("L'area e': "+(a*b));
System.out.println("Il perimetro e': "+(2*(a+b)));

t = Leggi.Risposta("Un altro? (0) Uscire? (1)");

if(t == 1){
	System.exit(0);
	}   //fine if

	}   //fine main
}  //fine classe

L'istruzione System.exit(0) è simile all'istruzione System.out.println() e dice al sistema di uscire. Purtoppo questo programma non risolve il nostro problema! Infatti il programma esce comunque, perchè anche se t non è uguale a 1, non c'è nessuna istruzione alla fine che dica: ricommincia dall'inizio...

Per risolvere il problema, possiamo usare l'istruzione while

while in inglese significa: mentre

while funziona così:

while(condizione){
	//blocco A: questo blocco sarà eseguito mentre (finchè) la condizione sarà vera
	}
//questa istruzione sarà eseguita solo quando il programma sarà uscito dal ciclo while, cioè quando condizione non sarà vera

Per esempio:

int x=0;
while(x < 3){
	System.out.println("x vale: "+x);
	x = x+1;
	}
avrà il seguente output:
x vale: 0
x vale: 1
x vale: 2
A questo punto possiamo modificare il nostro programma nel modo seguente:


 public class AreaPeriRett2{

 public static void main(String[] arg){

 int a,b;
 int t,c=0;

 while(c == 0){    //NB c è inizializzato con il valore 0

 a = Leggi.Risposta("Inserisci il primo lato: ");
 b = Leggi.Risposta("Inserisci il secondo lato: ");
 System.out.println("L'area e': "+(a*b));
 System.out.println("Il perimetro e': "+(2*(a+b)));

 t=Leggi.Risposta("Un altro? (0) Uscire? (1)");

 if(t == 1){ 
	c = 1;}  //a questo punto c non è più 0, si esce dal ciclo while, si va a fine main, poi fine classe e
		//il programma termina

		}//fine while
	}//fine main
 }//fine classe