Compitino precedente |
Home |
Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13
2
for (i=0; i < settimana.length; i++) if (settimana[i].equals("mercoledì")) break; System.out.println ("mercoledì\tindice: " + i);
settimana[3]
settimana[4].charAt(1)
settimana[4].indexOf('e')
4
settimana[settimana.length-1]
5
Le due espressioni booleane non sono equivalenti ma complementari, ovvero una è la negazione dell'altra, come si può vedere applicando la legge di De Morgan. La tabella di verità delle due espressioni è la seguente:
a | b | c | a && (b||c) | (!c && !b)|| !a |
---|---|---|---|---|
f | f | f | f | v |
f | f | v | f | v |
f | v | f | f | v |
f | v | v | f | v |
v | f | f | f | v |
v | f | v | v | f |
v | v | f | v | f |
v | v | v | v | f |
public class Parole { private String valore; Parole() { this.valore = new String(); } Parole(String s) { this.valore = s; } }
overloading
.
public static String contrai(String s) { String new_s = new String(); for (int i=0; i < s.length(); i=i+2) new_s += s.charAt(i); return new_s; }
valore
di un oggetto, che diventa il parametro implicito del metodo.
In questo caso il metodo non necessita del parametro esplicito. I due metodi avrebbero
segnatura diversa e non si avrebbe ambiguità ma avremmo overloading
dei due metodi.
public String contrai() { String new_s = new String(); for (int i=0; i < this.valore.length(); i=i+2) new_s += this.valore.charAt(i); return new_s; }
da usarsi in una istruzione come ad esempio:Parole.contrai("macchina")
String s = Parole.contrai("macchina")
Parole par = new Parole("anfiteatro"); String nuova = p.contrai();
public static Rettangolo trasformazione(Rettangolo unRett) { return new Rettangolo(unRett.origine.x, unRett.origine.y, 2*unRett.amp, 2*unRett.alt); }
qua pluto pippo num1: 32 num2: 12 11 9 7 5 3 1 num1: 32 num2: 1
new Fiore()
genera un errore.
Il costruttore di default senza parametri non può essere invocato
poiché sono già stati definiti costruttori con parametri.
while
:
while (i >= 0 && i < MAX) { vettore [i]++; i = (int) (Math.random() * (MAX+1)); }
for
:
for (int j = 0; j < MAX; j++) if (vettore [j] >= 1) System.out.println (j + "\t" + vettore [j]);
while
potrebbe aver generato i numeri causuali:
0 2 4 2 4 1 4 2 1 4 5
e quindi avrebbe inizializzato l'array
vettore = {1, 2, 3, 0, 4}
causando la stampa:
0 1 1 2 2 3 4 4
Stilo(int, String)
public Stilo (int pen, String tipo) { this.pennino = pen; this.tipo = tipo; }
uguale(Stilo s)
:
public boolean uguale (Stilo s) { return (pennino == s.pennino && tipo.equals(s.tipo) && colore.equals(s.colore) && inchiostro.equals(s.inchiostro)); }
pelikan
e
parker
sono state dichiarate ma non istanziate quindi non è possibile
inviare il messaggio caricaInchiostro(String)
a oggetti inesistenti.
Nel caso le due variabili fossero state istanziate ad esempio con le istruzioni:
pelikan = new Stilo()
e parker = new Stilo()
allora sarebbe stato eseguito il ramo else
a causa del diverso valore
del campo inchiostro
.
interface
come si può capire dall'uso della parola riservata implements
nella definizione della classe Stilo
nell'esercizio seguente.
Il codice va completato nel seguente modo
interface ConColore { void setColore(String); String getColore(); }
Stilo
va completata aggiungendo l'implementazione dei
metodi prescritti dall'interfaccia ConColore
Stilo implements ConColore { ... void setColore(String c) { this.colore = c; } String getColore() { return this.colore; } }
deposito
con elementi di tipo
ConColore
. L'array viene poi inizializzato con oggetti di classe
Stilo
che correttamente implementa l'interfaccia ConColore
.
Ai singoli elementi dell'array vengono lanciati
i messaggi getColore()
che sono propri dell'interfaccia.
Il compilatore nel valutare la correttezza dell'istruzione controlla
che il metodo che viene lanciato sia dell'interfaccia.
Se si volesse invece stampare il tipo di ogni elemento dell'array,
facendo riferimento ad una caratteristica della classe particolare
Stilo
che implementa l'interfaccia,
allora andrebbe effettuato un cast esplicito su ciascun elemento.
Infatti è solo durante l'esecuzione del programma che effettivamente
nelle posizioni dell'array ci saranno oggetti di classe Stilo
.
Il compilatore può solo effettuare controlli statici sulla correttezza
delle istruzioni.
stampa(((Stilo)deposito[i]).getTipo());
Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13