L'obiettivo di questa esercitazione è familiarizzare con i seguenti concetti, illustrati nel capitolo 3 del libro:
EasyIn
per un input più comodo dei
dati durante l'esecuzione.);
. Si possono raggruppare istruzioni con
le parentesi graffe {}
).if/else
e
switch/case
.while
(primi cenni).Ove non altrimenti indicato, rispondete alle domande prima ragionando su carta e poi provando a editare, compilare ed eseguire. Gli esercizi etichettati con l'asterisco (*) sono più difficili: affrontateli dopo aver risolto gli altri.
Chi di voi non ha ancora finito gli esercizi dell'esercitazione precedente, lo faccia oggi: ancora per questa settimana aspettiamo "chi è rimasto indietro". Dalla prossima, però, ipotizzerò che tutti abbiano svolto tutti (o quasi) gli esercizi delle esercitazioni precedenti, e quindi non ci sarà più molto tempo per recuperare...
Obiettivo: Familiarizzare con
la classe EasyIn
per l'input agevole di dati.
Attività:
System.in.read()
, è piuttosto scomoda: viene letta
un'unica cifra, di cui viene restituito il codice ASCII. EasyIn
per l'input di dati da tastiera durante
l'esecuzione di un programma. Va salvata in un file
EasyIn.java nella stessa directory del programma che la
usa. Vi sono definiti alcuni metodi per l'input dei quattro tipi di
interi (readByte()
, readShort()
,
readInt()
e readLong()
), dei due tipi di
razionali (readFloat()
e readDouble()
), dei
caratteri (readChar()
), dei booleani
(readBoolean()
) e delle stringhe
(readString()
). byte b; short s; int i; long l; float f; double d; boolean t; char c; string x; b = EasyIn.readByte(); s = EasyIn.readShort(); i = EasyIn.readInt(); l = EasyIn.readLong(); f = EasyIn.readFloat(); d = EasyIn.readDouble(); t = EasyIn.readBoolean(); c = EasyIn.readChar(); x = EasyIn.readString();
EasyIn.java
per
ulteriori dettagli sul funzionamento (ma alcune cose vi saranno
comunque oscure, almeno per ora).EasyIn
per l'input.Obiettivo: Familiarizzare con la sequenza delle istruzioni.
Attività:
Class Prova { public static void Main(string[] args) { int x; int y; int z; x = 1; y = 2; y = x + 1 z = y + x; System.out.println("x = " + x + "\ny = " + y + "\nz = " + z) } }Ci sono alcuni (4 + 1) errori: cercate innanzi tutto di individuarli sulla carta, senza compilare. Poi compilate (senza correggere il programma) e analizzate i messaggi di errore del compilatore. Vedrete che gli errori vengono individuati un po' alla volta: correggete di volta in volta solo quelli individuati dal compilatore, e ricompilate finché la compilazione non dà più errori. Poi eseguite: dovrebbe essere segnalato (questa volta dall'interprete) un altro errore: correggetelo, ricompilate e rieseguite.
class Prova { public static void main(String[] args) { int x; int y; int z; x = 1; y = 2; z = y + x; y = x + 1; System.out.println("x = " + x + "\ny = " + y + "\nz = " + z); } }E che cosa succede se adesso si inverte l'ordine della seconda e terza istruzione di assegnamento? Ossia:
class Prova { public static void main(String[] args) { int x; int y; int z; x = 1; z = y + x; y = 2; y = x + 1; System.out.println("x = " + x + "\ny = " + y + "\nz = " + z); } }Perché?
Obiettivo: Familiarizzare con l'istruzione di
selezione if/else
.
Attività:
if (x == 0) System.out.println("Il valore di x e' zero"); else if (x == 1) System.out.println("Il valore di x e' uno"); else if (x == 2) System.out.println("Il valore di x e' due"); else if (x == 3) System.out.println("Il valore di x e' tre");Cosa succede se eliminate tutti gli
else
? Anche se gli
else
possono sembrare inutili in questo caso, il
programma alternativo senza di essi è meno efficiente:
perché? Suggerimento: considerate il numero di
confronti di uguaglianza che devono essere effettuati dall'interprete
Java nei due casi."x e' pari"
o "x e' dispari"
, a seconda del
valore di x
(sempre considerando che x possa assumere
solo i valori 0,1,2,3). Fatelo in tre modi:
System.out.println
.System.out.println
(occhio
alle parentesi graffe!).if/else
con le 2 istruzioni
System.out.println
opportune (e con un confronto in
più...).if
che visualizza
Ciao! se la variabile n
di tipo
int
è pari.if
che visualizza
Ciao! se la variabile b
di tipo
boolean
è true
.
Nota: Se avete usato l'operatore di uguaglianza
==
, siete proprio incorreggibili...Obiettivo: Comprendere la differenza fra
l'istruzione if/else
e l'operatore condizionale
?:
.
Attività:
if/else
e l'operatore condizionale
?:
sono interscambiabili. Scrivete un'istruzione di
assegnamento (che usa l'operatore condizionale ?:
)
equivalente alla seguente istruzione if/else
.
if (x >= 0) y = y + 1; else y = y + 2;
?:
) equivalente alla seguente istruzione
if
.
if (x >= 0) y = y + 1;
if/else
equivalente alla
seguente istruzione di assegnamento.
z = (x >= 0 && x % 2 == 1) ? 0 : 1;
if/else
e l'operatore
condizionale ?:
non sono interscambiabili in maniera
immediata. Quali istruzioni di assegnamento (che usano l'operatore
condizionale ?:
) dovete scrivere per ottenere un
frammento di codice equivalente alla seguente istruzione
if/else
?
if (x >= 0) y = y + 1; else z = z + 1;Suggerimento: Per prima cosa, riscrivete l'
if/else
usando due if
...
if/else
.)Obiettivo: Familiarizzare con gli if/else
annidati.
Attività:
x
di tipo
int
è positiva e pari, e visualizza
"sigh" altrimenti. Scrivetene due versioni: la prima usando
l'operatore di and logico, la seconda con if
annidati (fate attenzione!!).boolean ferrari; boolean mocassini; boolean occhialiDaSole;a cui assegnerà il valore opportuno da tastiera (usando
EasyIn.readBoolean()
). Seguono poi alcune istruzioni che
assegnano il valore opportuno alla variabile booleana
uscita
e altre istruzioni che visualizzano il messaggio
"Usciamo" se la decisione è positiva.
Scrivete il programmino usando:
if
annidatiif
if
if
annidatiif
if
Obiettivo: Comprendere la differenza fra
annidamenti if
e annidamenti else
.
Attività:
else
invece dell'annidamento if
(x
, y
e z
sono variabili di
tipo boolean
).
if (x) if (y) if (z) System.out.println("Si, si, si"); else System.out.println("Si, si, no"); else System.out.println("Mah"); else System.out.println("Boh");
Obiettivo: Familiarizzare con l'istruzione
while
.
Attività:
10
e 100
(e
quindi usando, ad esempio 9
e
99
). Nota: la versione precedente
è da preferire a questa, perché gli estremi del ciclo
sono espliciti nel programma.System.out.print
visualizza i suoi argomenti senza
andare a capo...if
per decidere se un numero è
multiplo di 3).if
per decidere se un
numero è pari.if
.