Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
for
:1
2
i: 3
// all'uscita dal ciclo for
:1
2
4
5
7
8
i: 10
// all'uscita dal ciclo for
:1
2
BarcaVela
avrà i metodi citati
perchè li eredita dalla superclasse, così come potrà
avere disponibili altri metodi eventualmente definiti nella classe.
nome
è dichiarato private
,
e può essere modificato solo all'interno della classe che lo definisce
oppure da metodi pubblici della classe in questione dopo che l'oggetto
è stato generato. Quindi è necessario definire un metodo dichiarato
public
che invocato su un oggetto già generato potrà
accedere al membro privato.
Il metodo potrà essere invocato come segue:public void modificaNome (String nuovoNome) { nome = nuovoNome; }
Dipendente dip = new Dipendente ("Carlo"); dip. modificaNome("Carlo Rossi");
Impiegato
che estende la classe Dipendente
dovrà avere i costruttori così corretti:
class Impiegato extends Dipendente { private int settore; // 1, 2, 3 ad esempio Impiegato() { super(); settore = 1; // valore di default } Impiegato(String unNome, int unSettore) { super(unNome); settore = unSettore; } }
nome
della superclasse,
ma non direttamente perchè non viene ereditato in quanto dichiarato privato.
imp.nome
per accedere al campo nome non è corretta
perchè il campo nome
è privato, come si è detto.
Una variabile d'istanza dichiarata privata in una classe base
non è accessibile direttamente invocandola per nome,
neppure nella definizione di metodi della classe derivata,
ma solo tramite metodi pubblici della classe base, se ci sono.
Dipendente
e che perciò verrà ereditato
dalle classi derivate, come ad esempio:
Questo metodo rende lecita l'struzione seguente per accedere al campopublic String riportaNome () { return nome; }
nome
e riporta all'ambiente chiamante la stringa del valore del campo:
imp.riportaNome()
Si veda la classe Impiegato.java.
for
e while
:
public static int[] init(int[] a) { for (int i=0; i < MAX; i++) a[i]=2*i + 1; return a; }
public static int[] init(int[] a) { int i=0; while (i < MAX) a[i]=2*++i + 1; return a; }
public static int[] rimuovi(int p, int[] a) { for (int i = p; i < a.length-1;) a[i]=a[++i]; a[a.length-1] = 0; return a; }
public class Tokenizzatore { public static void main (String[] a) { System.out.print("input una riga di testo: "); String riga = Keyboard.readString(); StringTokenizer processore_di_riga = new StringTokenizer(riga); ; String [] frase = new String[processore_di_riga.countTokens()]; ; for (int i = 0; processore_di_riga.hasMoreTokens(); i++) frase[i] = processore_di_riga.nextToken(); for (int i = 0; i < frase.length; i++) System.out.println(frase[i]); } }
Numeri() { array_numeri = new int[MAX]; for (int i = 0; i < MAX; i++) array_numeri[i] = (int)(Math.random() * 10) + 1; } public int conta() { int i = 0, cont = 0; while (i < MAX) if (array_numeri[i++]%2 == 0) cont++; return cont; }
Sì è corretto. Perché il metodo elements()
della classe Vector
riporta un valore di tipo Enumeration
,
cioè riporta una enumerazione dei componenti del vettore.
Il ciclo quindi costutisce la stampa delle componenti del vettore. Si noti che la classe Vector
e l'interfaccia Enumeration
si trovano entrambe nel pacchetto java.util
public boolean hasMoreElements() { if (indice == mazzo.length) return false; else return true; } public Object nextElement() { return (Object)mazzo[indice++]; }
Lo stack viene utilizzato da un metodo che scandisce l'espressione
per valutarla, leggendo i diversi elementi d'informazione (token) ad uno ad uno:
ad ogni token che può essere un operando viene effettuata una operazione di
push
sullo stack, mentre ad ogni token che rappresenta un simbolo di
operazione vengono effettuate due operazioni di eliminazione dallo stack
(pop
) poi viene valutato il nuovo valore che viene successivamente
inserito sullo stack (push
).
1 5 + 2 * 3 1 + /:
stack: | 1 | ||||||||
5 | 2 | 3 | 3 | 4 | |||||
1 | 1 | 6 | 6 | 12 | 12 | 12 | 12 | 3 | |
token: | |||||||||
1 | 5 | + | 2 | * | 3 | 1 | + | / |
Esercizio 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10