Un pò di logica!
Per programmare abbiamo bisogno essenzialmente di cicli (while) e di diramazioni (if ...else); tutte le altre costruzioni si ottengono da queste due.
While :
La struttura di un ciclo while è la seguente:
while(Cdzne) {
istruzioni
}
next command
quando incontra un ciclo while il computer verifica la condizione Cdzne se Cdzne è falsa, il blocco di istruzioni tra { e } viene saltato e il computer passa a l'istruzione next command; se Cdzne è vera, vengono eseguite le istruzioni tra { e }; dopodichè il computer torna a verificare la condizione Cdzne ecc... In altri termini le istruzioni tra { e } saranno eseguite finchè Cdzne è vera.
Esempio:
int n = 1;
while(n < 3){
System.out.println(n);
n +=1;
}
System.out.println("Fine");
La variabile n è inizializzata col valore 1. Il computer valuta l'espressione n < 3 , l'espressione è vera, il computer esegue le istruzioni tra le parentesi: stampa "1" e aggiunge 1 a n; adesso n vale 2 (NB: n +=1; è la stessa cosa che n = n+1;). Il computer torna a valutare l'espressione n < 3 , l'espressione è vera, il computer esegue le istruzioi tra le parentesi: stampa "2" e aggiunge 1 a n; adesso n vale 3. Il computer torna a valutare l'espressione n < 3 , l'espressione è falsa, il computer salta il blocco tra le parentesi e va all'istruzione successiva: stampa "Fine" (osservare che a questo punto n vale 3).
if :
La struttura di un if è:
if(Cdze) {
istruzioni
}
next command;
Se l'espressione Cdze è vera, il computer esegue le istruzioni tra le parentesi, altrimenti (se Cdze è falsa) il computer salta il blocco tra le parentesi e passa direttamente a l'istruzione next command.
if ... else :
Un if può venire con un else, questo serve a creare una diramazione.
if(Cdze) {
istr.1
}
else{
istr.2
}
next command
Il computer esamina Cdze, se Cdze è vera esegue istr.1 e dopo passa a l'istruzione next command (istr.2 non vengono eseguite); se Cdze è falsa, il computer salta il primo blocco tra le parentesi, passa al secondo blocco (quello dell'else) ed esegue istr.2, dopodichè passa a next command. In conclusione uno ed uno solo dei blocchi istr.1 , istr.2 viene eseguito.
Più diramazioni :
Un else può contenere un if, per esempio:
if(Cdze) {
istr.1
}
else{
if(Cdze2){
istr.2
}
else{
istr.3
}
}
next command
Con un pò di attenzione si vede che uno ed uno solo dei tre blocchi istr.1, istr.2, istr.3 verrà eseguito.
Attenzione: non è indispensabile scrivere il codice usando le parentesi, il compilatore non guarda le parentesi, pertanto si può anche scrivere:
if(Cdze) {
istr.1
}
else
if(Cdze2){
istr.2
}
else{
istr.3
}
next command
o ancora:
if(Cdze) {
istr.1
}
else if(Cdze2){
istr.2
}
else{
istr.3
}
next command
o (peggio) ancora:
if(Cdze)
istr.1
else if(Cdze2)
istr.2
else
istr.3
next command
Inutile dire che la scrittura con le parentesi e il codice rientrante aiuta molto a capire (e a non fare errori!)
Naturalmente si può generalizzare:
if(Cdze){
istr.1
}
else if(Cdze2){
istr.2
}
else if(Cdze3){
istr.3
}
...........
else if(Cdzen){
istr.n
}
else{
istr.(n+1)
}
Uno ed uno solo dei blocchi istr.i sarà eseguito. L'ultimo else può essere ommesso.
Operatori relazionali :
Per testare se valori sono uguali abbiamo a disposizione i seguenti operatori:
= = (uguaglianza) > (strettamente maggiore) >= (maggiore o uguale); idem con minore: < <=
!= (non uguale)
Attenzione:
x = a; significa assegnare a x il valore di a, pertanto se si scrive:
if(x = 0) {....
sorge un problema. Bisogna invece usare il segno = = che significa "uguale a",
quindi
if(x = = 0){... è corretto.
Invece per confrontare delle stringhe bisogna usare .equals per esempio: if(Str.equals(Str2)){... dove Str e Str2 sono delle stringhe.
Operatori booleani:
&& è il connettore logico "e", mentre || è il connettore logico "o"; la negazione logica si indica con !