Programmazione Cognome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compitino del 23 novembre 2011 Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Negli esercizi fate riferimento alle classi di cui trovate nell’ultima pagina un estratto della documentazione. Supponete che le classi siano già correttamente importate nel file sorgente. Negli esempi di esecuzione riportati, il testo sottolineato (come ad esempio 10 ) rappresenta Matricola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dati inseriti dall’utente. TEMPO DISPONIBILE: 1 ora e 20 minuti. 1. Completate il seguente metodo main in modo che: (a) legga due stringhe di caratteri, (b) controlli se la seconda stringa è un prefisso della prima, (c) in caso affermativo comunichi il suffisso ottenuto cancellando dalla prima stringa il prefisso uguale alla seconda, (d) in caso negativo comunichi che la seconda stringa non è un prefisso della prima. Note: - Una stringa è un prefisso di un’altra se appare all’inizio di essa, è un suffisso se appare alla fine. - Non preoccupatevi delle questioni relative alle maiuscole e minuscole, che sono considerate diverse. Pertanto tre non va considerato prefisso di Treno. - L’output deve essere fornito esattamente nello stesso formato degli esempi di esecuzione seguenti: Esempio 1 Stringa da esaminare? elefante Prefisso cercato? ele Suffisso rimanente: fante Esempio 2 Stringa da esaminare? elefante Prefisso cercato? elica elica non e’ un prefisso di elefante public static void main(String[] args) { ConsoleInputManager in = new ConsoleInputManager(); ConsoleOutputManager out = new ConsoleOutputManager(); String s = in.readLine("Stringa da esaminare? "); String pref = in.readLine("Prefisso cercato? "); ... 2. Si vuole scrivere un metodo main analogo al precedente che al posto della seconda stringa legga un numero intero. Il metodo deve controllare se la stringa che rappresenta il numero in lettere è un prefisso della prima stringa, come nei seguenti esempi di esecuzione: Esempio 4 Esempio 3 Stringa da esaminare? tremonti Stringa da esaminare? tremonti Numero cercato? 3 Numero cercato? 4 Suffisso rimanente: monti quattro non e’ un prefisso di tremonti Il metodo può essere scritto modificando la parte iniziale del metodo main dell’esercizio precedente. In particolare, dopo avere letto la prima stringa e il numero (memorizzato in una variabile num di tipo int) si può ricavare la stringa che rappresenta in lettere il numero, memorizzandone il riferimento in una variabile pref di tipo String (da dichiarare). Scrivete solo questa parte di codice (se avete svolto correttamente l’esercizio 1 il resto non cambia). public static void main(String[] args) { ConsoleInputManager in = new ConsoleInputManager(); ConsoleOutputManager out = new ConsoleOutputManager(); String s = in.readLine("Stringa da esaminare? "); int num = in.readInt("Numero cercato? "); ... 3. Considerate le seguenti dichiarazioni di variabile: Sequenza<String> seq; int lung; //riferimento a una sequenza di stringhe Supponete che seq si riferisca a una sequenza già costruita (quindi non contiene null) e che a lung sia stato assegnato un valore. Supponete inoltre di disporre del solito riferimento out al monitor. Scrivete una porzione di codice che visualizzi sul monitor tutte le stringhe di lunghezza maggiore di lung che iniziano con una lettera maiuscola. Ad esempio, se gli oggetti presenti nella sequenza rappresentano le stringhe "cane" "Gatto" "2 Albero" "" "Elefante" "pipistrello" "Ape" e lung contiene 4, le stringhe fornite in output dovranno essere "Gatto" ed "Elefante" (come nei letterali Java, nell’esempio le virgolette evidenziano l’inizio e la fine di ciascuna stringa, ma non fanno parte della stringa). 4. Siano x e y due variabili di tipo int alla quali sono stati assegnati dei valori iniziali. Scrivete, per i casi indicati, i valori delle due variabili dopo l’esecuzione dei seguenti frammenti di codice: (b) y = y - x + y; x = x + y + y; y = x - y; (a) x = x + y + y; y = y - x + y; y = x - y; Frammento (a), assegnamenti iniziali x = 4; y = 3 Frammento (b), assegnamenti iniziali x = 4; y = 3 valore finale di x? valore finale di x? valore finale di y? valore finale di y? Frammento (a), assegnamenti iniziali x = 3; y = 4 Frammento (b), assegnamenti iniziali x = 3; y = 4 valore finale di x? valore finale di x? valore finale di y? valore finale di y? 5. Sia x una variabile di tipo int alla quale è stato assegnato un valore iniziale. Scrivete, per i casi indicati, i valori delle variabili b e c dopo l’esecuzione dei seguenti frammenti di codice: (a) boolean[] w = new for (int i = 0; i w[i] = i % 3 == boolean b = w[x / boolean c = w[x / boolean[x]; < w.length; i++) 1; 2] && w [x / 3]; 2] || w [x / 3]; (b) int[] w = new int[x]; int[] y = w; for (int i = 0; i < w.length; i++) w[i] = i; int b; int c = (b = y[x / 2]) + w[x / 3]; Frammento (a), assegnamento iniziale x = 4 Frammento (b), assegnamento iniziale x = 4 valore finale di b? valore finale di b? valore finale di c? valore finale di c? Frammento (a), assegnamento iniziale x = 3 Frammento (b), assegnamento iniziale x = 3 valore finale di b? valore finale di b? valore finale di c? valore finale di c? 6. Siano x e y due variabili di tipo Intero. Scrivete in ciascun riquadro il risultato dell’espressione di tipo boolean indicata, nell’ipotesi che immediatamente prima del calcolo dell’espressione siano stati eseguiti i due assegnamenti riportati sopra il riquadro: (a) x = y = new Intero(7); x == y x != y (c) x = new Intero(7); y = new Intero(x.intValue()); x == y x != y (b) x = new Intero(7); y = new Intero(x.intValue() / 2 * 2); x.equals(y) !x.equals(y) (d) x = new Intero(7); y = new Intero(x.intValue() * 2 / 2); x.equals(y) Nota: Ricordatevi che i valori del tipo boolean in Java non sono 0 e 1. !x.equals(y) prog.utili Class Intero Le istanze della classe rappresentano numeri interi. Constructor Detail Intero public Intero(int x) Costruisce un nuovo oggetto che rappresenta il numero intero fornito tramite l'argomento. java.lang !Class String Le sue istanze rappresentano stringhe di caratteri. Gli indici delle posizioni all’interno di una stringa variano da 0 alla lunghezza meno 1. Method Detail Method Detail charAt intValue Restituisce il carattere che si trova all’indice specificato. public int intValue() Restituisce il valore intero rappresentato dall’oggetto che esegue il metodo. endsWith public boolean endsWith(String suffix) toString public java.lang.String toString() Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo, espresso in lettere. Ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il metodo restituirà la stringa "trentaquattro". Restituisce true se e solo se la stringa che esegue il metodo ha come suffisso la stringa riferita da suffix. equals public boolean equals(String str) Restituisce true se e solo se la stringa che esegue il metodo è uguale a quella riferita da str. equals public boolean equals(Intero n) Restituisce true se e solo se l’oggetto che esegue il metodo rappresenta lo stesso numero intero rappresentato dall’oggetto di cui viene fornito il riferimento tramite l’argomento. java.lang public char charAt(int index) !Class Character Classe involucro corrispondente al tipo primitivo char. Le sue istanze rappresentano caratteri Method Detail isLowerCase public static boolean isLowerCase(char ch) Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera minuscola. isUpperCase public static boolean isUpperCase(char ch) Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera maiuscola. indexOf public int indexOf(String str) Restituisce l’indice della prima occorrenza, all’interno della stringa che esegue il metodo, della stringa riferita da str. Nel caso questa non sia un fattore della stringa che esegue il metodo, restituisce -1. length public int length() Restituisce la lunghezza della stringa, cioè il numero di caratteri che la compongono. startsWith public boolean startsWith(String prefix) Restituisce true se e solo se la stringa che esegue il metodo ha come prefisso la stringa riferita da prefix. substring public String substring(int beginIndex) Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che esegue il metodo, che si trovano a partire dall’indice specificato dall’argomento. substring public String substring(int beginIndex, int endIndex) prog.utili !Class Sequenza<E> Le sue istanze rappresentano sequenze di oggetti di tipo E, cioè collezioni di oggetti di tipo E che possono contenere duplicazioni. Nelle sequenze gli oggetti compaiono nell'ordine in cui sono stati inseriti. Inoltre una sequenza non può contenere riferimenti null N.B. E’ possible esaminare gli elementi contenuti in un oggetto di tipo Sequenza mediante cicli for-each. Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che esegue il metodo, che si trovano a partire dall’indice specificato dal primo argomento beginIndex, sino all’indice endIndex – 1. Pertanto il secondo argomento indica la prima posizione da escludere nella nuova stringa. Programmazione Cognome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compitino del 23 novembre 2011 Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Negli esercizi fate riferimento alle classi di cui trovate nell’ultima pagina un estratto della documentazione. Supponete che le classi siano già correttamente importate nel file sorgente. Negli esempi di esecuzione riportati, il testo sottolineato (come ad esempio 10 ) rappresenta Matricola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dati inseriti dall’utente. TEMPO DISPONIBILE: 1 ora e 20 minuti. 1. Completate il seguente metodo main in modo che: (a) legga due stringhe di caratteri, (b) controlli se la seconda stringa è un suffisso della prima, (c) in caso affermativo comunichi il prefisso ottenuto cancellando dalla prima stringa il suffisso uguale alla seconda, (d) in caso negativo comunichi che la seconda stringa non è un suffisso della prima. Note: - Una stringa è un suffisso di un’altra se appare alla fine di essa, è un prefisso se appare all’inizio. - Non preoccupatevi delle questioni relative alle maiuscole e minuscole, che sono considerate diverse. Pertanto Arte non va considerato suffisso di carte. - L’output deve essere fornito esattamente nello stesso formato degli esempi di esecuzione seguenti: Esempio 1 Stringa da esaminare? tremonti Suffisso cercato? monti Prefisso rimanente: tre Esempio 2 Stringa da esaminare? tremonti Suffisso cercato? menti menti non e’ un suffisso di tremonti public static void main(String[] args) { ConsoleInputManager in = new ConsoleInputManager(); ConsoleOutputManager out = new ConsoleOutputManager(); String s = in.readLine("Stringa da esaminare? "); String suff = in.readLine("Suffisso cercato? "); ... 2. Si vuole scrivere un metodo main analogo al precedente che al posto della seconda stringa legga un numero intero. Il metodo deve controllare se la stringa che rappresenta il numero in lettere è un suffisso della prima stringa, come nei seguenti esempi di esecuzione: Esempio 4 Esempio 3 Stringa da esaminare? risotto Stringa da esaminare? risotto Numero cercato? 8 Numero cercato? 9 Prefisso rimanente: ris nove non e’ un suffisso di risotto Il metodo può essere scritto modificando la parte iniziale del metodo main dell’esercizio precedente. In particolare, dopo avere letto la prima stringa e il numero (memorizzato in una variabile num di tipo int) si può ricavare la stringa che rappresenta in lettere il numero, memorizzandone il riferimento in una variabile suff di tipo String (da dichiarare). Scrivete solo questa parte di codice (se avete svolto correttamente l’esercizio 1 il resto non cambia). public static void main(String[] args) { ConsoleInputManager in = new ConsoleInputManager(); ConsoleOutputManager out = new ConsoleOutputManager(); String s = in.readLine("Stringa da esaminare? "); int num = in.readInt("Numero cercato? "); ... 3. Considerate le seguenti dichiarazioni di variabile: Sequenza<String> seq; int lung; //riferimento a una sequenza di stringhe Supponete che seq si riferisca a una sequenza già costruita (quindi non contiene null) e che a lung sia stato assegnato un valore. Supponete inoltre di disporre del solito riferimento out al monitor. Scrivete una porzione di codice che visualizzi sul monitor tutte le stringhe di lunghezza maggiore di lung che iniziano con una lettera minuscola. Ad esempio, se gli oggetti presenti nella sequenza rappresentano le stringhe "Cane" "gatto" "2 albero" "" "elefante" "Pipistrello" "ape" e lung contiene 4, le stringhe fornite in output dovranno essere "gatto" ed "elefante" (come nei letterali Java, nell’esempio le virgolette evidenziano l’inizio e la fine di ciascuna stringa, ma non fanno parte della stringa). 4. Siano x e y due variabili di tipo int alla quali sono stati assegnati dei valori iniziali. Scrivete, per i casi indicati, i valori delle due variabili dopo l’esecuzione dei seguenti frammenti di codice: (b) x = x + y + y; y = y - x + y; y = x - y; (a) y = y - x + y; x = x + y + y; y = x - y; Frammento (a), assegnamenti iniziali x = 3; y = 4 Frammento (b), assegnamenti iniziali x = 3; y = 4 valore finale di x? valore finale di x? valore finale di y? valore finale di y? Frammento (a), assegnamenti iniziali x = 4; y = 3 Frammento (b), assegnamenti iniziali x = 4; y = 3 valore finale di x? valore finale di x? valore finale di y? valore finale di y? 5. Sia x una variabile di tipo int alla quale è stato assegnato un valore iniziale. Scrivete, per i casi indicati, i valori delle variabili b e c dopo l’esecuzione dei seguenti frammenti di codice: (a) int[] w = new int[x]; int[] y = w; for (int i = 0; i < w.length; i++) w[i] = i; int b; int c = (b = y[x / 2]) + w[x / 3]; (b) boolean[] w = new for (int i = 0; i w[i] = i % 3 == boolean b = w[x / boolean c = w[x / boolean[x]; < w.length; i++) 1; 2] && w [x / 3]; 2] || w [x / 3]; Frammento (a), assegnamento iniziale x = 4 Frammento (b), assegnamento iniziale x = 4 valore finale di b? valore finale di b? valore finale di c? valore finale di c? Frammento (a), assegnamento iniziale x = 3 Frammento (b), assegnamento iniziale x = 3 valore finale di b? valore finale di b? valore finale di c? valore finale di c? 6. Siano x e y due variabili di tipo Intero. Scrivete in ciascun riquadro il risultato dell’espressione di tipo boolean indicata, nell’ipotesi che immediatamente prima del calcolo dell’espressione siano stati eseguiti i due assegnamenti riportati sopra il riquadro: (a) x = new Intero(7); y = new Intero(x.intValue()); x == y x != y (c) x = y = new Intero(7); x == y x != y (b) x = new Intero(7); y = new Intero(x.intValue() * 2 / 2); x.equals(y) !x.equals(y) (d) x = new Intero(7); y = new Intero(x.intValue() / 2 * 2); x.equals(y) Nota: Ricordatevi che i valori del tipo boolean in Java non sono 0 e 1. !x.equals(y) prog.utili Class Intero Le istanze della classe rappresentano numeri interi. Constructor Detail Intero java.lang !Class String Le sue istanze rappresentano stringhe di caratteri. Gli indici delle posizioni all’interno di una stringa variano da 0 alla lunghezza meno 1. public Intero(int x) Costruisce un nuovo oggetto che rappresenta il numero intero fornito tramite l'argomento. Method Detail Method Detail public char charAt(int index) intValue public int intValue() Restituisce il valore intero rappresentato dall’oggetto che esegue il metodo. toOrdinalString charAt Restituisce il carattere che si trova all’indice specificato. equals public boolean equals(String str) Restituisce true se e solo se la stringa che esegue il metodo è uguale a quella riferita da str. public java.lang.String toOrdinalString() Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo, espresso in lettere come ordinale; ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il metodo restituirà la stringa "trentaquattresimo". indexOf toString indexOf public java.lang.String toString() Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo, espresso in lettere. Ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il metodo restituirà la stringa "trentaquattro". public int indexOf(String str, int fromIndex) equals length public boolean equals(Intero n) Restituisce true se e solo se l’oggetto che esegue il metodo rappresenta lo stesso numero intero rappresentato dall’oggetto di cui viene fornito il riferimento tramite l’argomento. public int indexOf(String str) Restituisce l’indice della prima occorrenza della stringa riferita da str all’interno della stringa che esegue il metodo. Se tale occorrenza non c’è restituisce -1. Restituisce l’indice della prima occorrenza a partire dall’indice specificato da fromIndex, della stringa riferita da str all’interno della stringa che esegue il metodo. Se tale occorrenza non c’è restituisce -1. public int length() Restituisce la lunghezza della stringa, cioè il numero di caratteri che la compongono. substring public String substring(int beginIndex) java.lang !Class Character Classe involucro corrispondente al tipo primitivo char. Le sue istanze rappresentano caratteri Method Detail isLowerCase public static boolean isLowerCase(char ch) Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera minuscola. prog.utili !Class Sequenza<E> Le sue istanze rappresentano sequenze di oggetti di tipo E, cioè collezioni di oggetti di tipo E che possono contenere duplicazioni. Nelle sequenze gli oggetti compaiono nell'ordine in cui sono stati inseriti. Inoltre una sequenza non può contenere riferimenti null N.B. E’ possible esaminare gli elementi contenuti in un oggetto di tipo Sequenza mediante cicli for-each. Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che esegue il metodo, che si trovano a partire dall’indice specificato dall’argomento. substring public String substring(int beginIndex, int endIndex) Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che esegue il metodo, che si trovano a partire dall’indice specificato dal primo argomento beginIndex, sino all’indice endIndex – 1. Pertanto il secondo argomento indica la prima posizione da escludere nella nuova stringa. Programmazione Cognome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compitino del 23 novembre 2011 Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Negli esercizi fate riferimento alle classi di cui trovate nell’ultima pagina un estratto della documentazione. Supponete che le classi siano già correttamente importate nel file sorgente. Negli esempi di esecuzione riportati, il testo sottolineato (come ad esempio 10 ) rappresenta Matricola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dati inseriti dall’utente. TEMPO DISPONIBILE: 1 ora e 20 minuti. 1. Completate il seguente metodo main in modo che: (a) legga due stringhe di caratteri, (b) controlli se la seconda stringa è un prefisso della prima, (c) in caso affermativo comunichi il suffisso ottenuto cancellando dalla prima stringa il prefisso uguale alla seconda, (d) in caso negativo comunichi che la seconda stringa non è un prefisso della prima. Note: - Una stringa è un prefisso di un’altra se appare all’inizio di essa, è un suffisso se appare alla fine. - Non preoccupatevi delle questioni relative alle maiuscole e minuscole, che sono considerate diverse. Pertanto tre non va considerato prefisso di Treno. - L’output deve essere fornito esattamente nello stesso formato degli esempi di esecuzione seguenti: Esempio 1 Stringa da esaminare? elefante Prefisso cercato? ele Suffisso rimanente: fante Esempio 2 Stringa da esaminare? elefante Prefisso cercato? elica elica non e’ un prefisso di elefante public static void main(String[] args) { ConsoleInputManager in = new ConsoleInputManager(); ConsoleOutputManager out = new ConsoleOutputManager(); String s = in.readLine("Stringa da esaminare? "); String pref = in.readLine("Prefisso cercato? "); ... 2. Si vuole scrivere un metodo main analogo al precedente che al posto della seconda stringa legga un numero intero. Il metodo deve controllare se la stringa che rappresenta il numero in lettere è un prefisso della prima stringa, come nei seguenti esempi di esecuzione: Esempio 4 Esempio 3 Stringa da esaminare? tremonti Stringa da esaminare? tremonti Numero cercato? 3 Numero cercato? 4 Suffisso rimanente: monti quattro non e’ un prefisso di tremonti Il metodo può essere scritto modificando la parte iniziale del metodo main dell’esercizio precedente. In particolare, dopo avere letto la prima stringa e il numero (memorizzato in una variabile num di tipo int) si può ricavare la stringa che rappresenta in lettere il numero, memorizzandone il riferimento in una variabile pref di tipo String (da dichiarare). Scrivete solo questa parte di codice (se avete svolto correttamente l’esercizio 1 il resto non cambia). public static void main(String[] args) { ConsoleInputManager in = new ConsoleInputManager(); ConsoleOutputManager out = new ConsoleOutputManager(); String s = in.readLine("Stringa da esaminare? "); int num = in.readInt("Numero cercato? "); ... 3. Considerate le seguenti dichiarazioni di variabile: Sequenza<String> seq; int lung; //riferimento a una sequenza di stringhe Supponete che seq si riferisca a una sequenza già costruita (quindi non contiene null) e che a lung sia stato assegnato un valore. Supponete inoltre di disporre del solito riferimento out al monitor. Scrivete una porzione di codice che visualizzi sul monitor tutte le stringhe di lunghezza maggiore di lung che iniziano con una lettera maiuscola. Ad esempio, se gli oggetti presenti nella sequenza rappresentano le stringhe "cane" "Gatto" "2 Albero" "" "Elefante" "pipistrello" "Ape" e lung contiene 4, le stringhe fornite in output dovranno essere "Gatto" ed "Elefante" (come nei letterali Java, nell’esempio le virgolette evidenziano l’inizio e la fine di ciascuna stringa, ma non fanno parte della stringa). 4. Siano x e y due variabili di tipo int alla quali sono stati assegnati dei valori iniziali. Scrivete, per i casi indicati, i valori delle due variabili dopo l’esecuzione dei seguenti frammenti di codice: (b) y = y - x + y; x = x + y + y; y = x - y; (a) x = x + y + y; y = y - x + y; y = x - y; Frammento (a), assegnamenti iniziali x = 2; y = 5 Frammento (b), assegnamenti iniziali x = 2; y = 5 valore finale di x? valore finale di x? valore finale di y? valore finale di y? Frammento (a), assegnamenti iniziali x = 5; y = 2 Frammento (b), assegnamenti iniziali x = 5; y = 2 valore finale di x? valore finale di x? valore finale di y? valore finale di y? 5. Sia x una variabile di tipo int alla quale è stato assegnato un valore iniziale. Scrivete, per i casi indicati, i valori delle variabili b e c dopo l’esecuzione dei seguenti frammenti di codice: (a) boolean[] w = new for (int i = 0; i w[i] = i % 3 == boolean b = w[x / boolean c = w[x / boolean[x]; < w.length; i++) 1; 2] || w [x / 3]; 2] && w [x / 3]; (b) int[] w = new int[x]; int[] y = w; for (int i = 0; i < w.length; i++) w[i] = i; int c; int b = (c = y[x / 2]) + w[x / 3]; Frammento (a), assegnamento iniziale x = 4 Frammento (b), assegnamento iniziale x = 4 valore finale di b? valore finale di b? valore finale di c? valore finale di c? Frammento (a), assegnamento iniziale x = 3 Frammento (b), assegnamento iniziale x = 3 valore finale di b? valore finale di b? valore finale di c? valore finale di c? 6. Siano x e y due variabili di tipo Intero. Scrivete in ciascun riquadro il risultato dell’espressione di tipo boolean indicata, nell’ipotesi che immediatamente prima del calcolo dell’espressione siano stati eseguiti i due assegnamenti riportati sopra il riquadro: (a) x = new Intero(7); y = new Intero(x.intValue() / 2 * 2); x.equals(y) !x.equals(y) (c) x = new Intero(7); y = new Intero(x.intValue() * 2 / 2); x.equals(y) !x.equals(y) (b) x = y = new Intero(7); x == y x != y (d) x = new Intero(7); y = new Intero(x.intValue()); x == y x != y Nota: Ricordatevi che i valori del tipo boolean in Java non sono 0 e 1. prog.utili Class Intero Le istanze della classe rappresentano numeri interi. Constructor Detail Intero public Intero(int x) Costruisce un nuovo oggetto che rappresenta il numero intero fornito tramite l'argomento. java.lang !Class String Le sue istanze rappresentano stringhe di caratteri. Gli indici delle posizioni all’interno di una stringa variano da 0 alla lunghezza meno 1. Method Detail Method Detail charAt intValue Restituisce il carattere che si trova all’indice specificato. public int intValue() Restituisce il valore intero rappresentato dall’oggetto che esegue il metodo. endsWith public boolean endsWith(String suffix) toString public java.lang.String toString() Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo, espresso in lettere. Ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il metodo restituirà la stringa "trentaquattro". Restituisce true se e solo se la stringa che esegue il metodo ha come suffisso la stringa riferita da suffix. equals public boolean equals(String str) Restituisce true se e solo se la stringa che esegue il metodo è uguale a quella riferita da str. equals public boolean equals(Intero n) Restituisce true se e solo se l’oggetto che esegue il metodo rappresenta lo stesso numero intero rappresentato dall’oggetto di cui viene fornito il riferimento tramite l’argomento. java.lang public char charAt(int index) !Class Character Classe involucro corrispondente al tipo primitivo char. Le sue istanze rappresentano caratteri Method Detail isLowerCase public static boolean isLowerCase(char ch) Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera minuscola. isUpperCase public static boolean isUpperCase(char ch) Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera maiuscola. indexOf public int indexOf(String str) Restituisce l’indice della prima occorrenza, all’interno della stringa che esegue il metodo, della stringa riferita da str. Nel caso questa non sia un fattore della stringa che esegue il metodo, restituisce -1. length public int length() Restituisce la lunghezza della stringa, cioè il numero di caratteri che la compongono. startsWith public boolean startsWith(String prefix) Restituisce true se e solo se la stringa che esegue il metodo ha come prefisso la stringa riferita da prefix. substring public String substring(int beginIndex) Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che esegue il metodo, che si trovano a partire dall’indice specificato dall’argomento. substring public String substring(int beginIndex, int endIndex) prog.utili !Class Sequenza<E> Le sue istanze rappresentano sequenze di oggetti di tipo E, cioè collezioni di oggetti di tipo E che possono contenere duplicazioni. Nelle sequenze gli oggetti compaiono nell'ordine in cui sono stati inseriti. Inoltre una sequenza non può contenere riferimenti null N.B. E’ possible esaminare gli elementi contenuti in un oggetto di tipo Sequenza mediante cicli for-each. Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che esegue il metodo, che si trovano a partire dall’indice specificato dal primo argomento beginIndex, sino all’indice endIndex – 1. Pertanto il secondo argomento indica la prima posizione da escludere nella nuova stringa. Programmazione Cognome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Compitino del 23 novembre 2011 Nome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Negli esercizi fate riferimento alle classi di cui trovate nell’ultima pagina un estratto della documentazione. Supponete che le classi siano già correttamente importate nel file sorgente. Negli esempi di esecuzione riportati, il testo sottolineato (come ad esempio 10 ) rappresenta Matricola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dati inseriti dall’utente. TEMPO DISPONIBILE: 1 ora e 20 minuti. 1. Completate il seguente metodo main in modo che: (a) legga due stringhe di caratteri, (b) controlli se la seconda stringa è un suffisso della prima, (c) in caso affermativo comunichi il prefisso ottenuto cancellando dalla prima stringa il suffisso uguale alla seconda, (d) in caso negativo comunichi che la seconda stringa non è un suffisso della prima. Note: - Una stringa è un suffisso di un’altra se appare alla fine di essa, è un prefisso se appare all’inizio. - Non preoccupatevi delle questioni relative alle maiuscole e minuscole, che sono considerate diverse. Pertanto Arte non va considerato suffisso di carte. - L’output deve essere fornito esattamente nello stesso formato degli esempi di esecuzione seguenti: Esempio 1 Stringa da esaminare? tremonti Suffisso cercato? monti Prefisso rimanente: tre Esempio 2 Stringa da esaminare? tremonti Suffisso cercato? menti menti non e’ un suffisso di tremonti public static void main(String[] args) { ConsoleInputManager in = new ConsoleInputManager(); ConsoleOutputManager out = new ConsoleOutputManager(); String s = in.readLine("Stringa da esaminare? "); String suff = in.readLine("Suffisso cercato? "); ... 2. Si vuole scrivere un metodo main analogo al precedente che al posto della seconda stringa legga un numero intero. Il metodo deve controllare se la stringa che rappresenta il numero in lettere è un suffisso della prima stringa, come nei seguenti esempi di esecuzione: Esempio 4 Esempio 3 Stringa da esaminare? risotto Stringa da esaminare? risotto Numero cercato? 8 Numero cercato? 9 Prefisso rimanente: ris nove non e’ un suffisso di risotto Il metodo può essere scritto modificando la parte iniziale del metodo main dell’esercizio precedente. In particolare, dopo avere letto la prima stringa e il numero (memorizzato in una variabile num di tipo int) si può ricavare la stringa che rappresenta in lettere il numero, memorizzandone il riferimento in una variabile suff di tipo String (da dichiarare). Scrivete solo questa parte di codice (se avete svolto correttamente l’esercizio 1 il resto non cambia). public static void main(String[] args) { ConsoleInputManager in = new ConsoleInputManager(); ConsoleOutputManager out = new ConsoleOutputManager(); String s = in.readLine("Stringa da esaminare? "); int num = in.readInt("Numero cercato? "); ... 3. Considerate le seguenti dichiarazioni di variabile: Sequenza<String> seq; int lung; //riferimento a una sequenza di stringhe Supponete che seq si riferisca a una sequenza già costruita (quindi non contiene null) e che a lung sia stato assegnato un valore. Supponete inoltre di disporre del solito riferimento out al monitor. Scrivete una porzione di codice che visualizzi sul monitor tutte le stringhe di lunghezza maggiore di lung che iniziano con una lettera minuscola. Ad esempio, se gli oggetti presenti nella sequenza rappresentano le stringhe "Cane" "gatto" "2 albero" "" "elefante" "Pipistrello" "ape" e lung contiene 4, le stringhe fornite in output dovranno essere "gatto" ed "elefante" (come nei letterali Java, nell’esempio le virgolette evidenziano l’inizio e la fine di ciascuna stringa, ma non fanno parte della stringa). 4. Siano x e y due variabili di tipo int alla quali sono stati assegnati dei valori iniziali. Scrivete, per i casi indicati, i valori delle due variabili dopo l’esecuzione dei seguenti frammenti di codice: (b) x = x + y + y; y = y - x + y; y = x - y; (a) y = y - x + y; x = x + y + y; y = x - y; Frammento (a), assegnamenti iniziali x = 5; y = 2 Frammento (b), assegnamenti iniziali x = 5; y = 2 valore finale di x? valore finale di x? valore finale di y? valore finale di y? Frammento (a), assegnamenti iniziali x = 2; y = 5 Frammento (b), assegnamenti iniziali x = 2; y = 5 valore finale di x? valore finale di x? valore finale di y? valore finale di y? 5. Sia x una variabile di tipo int alla quale è stato assegnato un valore iniziale. Scrivete, per i casi indicati, i valori delle variabili b e c dopo l’esecuzione dei seguenti frammenti di codice: (a) int[] w = new int[x]; int[] y = w; for (int i = 0; i < w.length; i++) w[i] = i; int c; int b = (c = y[x / 2]) + w[x / 3]; (b) boolean[] w = new for (int i = 0; i w[i] = i % 3 == boolean b = w[x / boolean c = w[x / boolean[x]; < w.length; i++) 1; 2] || w [x / 3]; 2] && w [x / 3]; Frammento (a), assegnamento iniziale x = 4 Frammento (b), assegnamento iniziale x = 4 valore finale di b? valore finale di b? valore finale di c? valore finale di c? Frammento (a), assegnamento iniziale x = 3 Frammento (b), assegnamento iniziale x = 3 valore finale di b? valore finale di b? valore finale di c? valore finale di c? 6. Siano x e y due variabili di tipo Intero. Scrivete in ciascun riquadro il risultato dell’espressione di tipo boolean indicata, nell’ipotesi che immediatamente prima del calcolo dell’espressione siano stati eseguiti i due assegnamenti riportati sopra il riquadro: (a) x = new Intero(7); y = new Intero(x.intValue() * 2 / 2); x.equals(y) !x.equals(y) (c) x = new Intero(7); y = new Intero(x.intValue() / 2 * 2); x.equals(y) !x.equals(y) (b) x = new Intero(7); y = new Intero(x.intValue()); x == y x != y (d) x = y = new Intero(7); x == y Nota: Ricordatevi che i valori del tipo boolean in Java non sono 0 e 1. x != y prog.utili Class Intero Le istanze della classe rappresentano numeri interi. Constructor Detail Intero public Intero(int x) Costruisce un nuovo oggetto che rappresenta il numero intero fornito tramite l'argomento. java.lang !Class String Le sue istanze rappresentano stringhe di caratteri. Gli indici delle posizioni all’interno di una stringa variano da 0 alla lunghezza meno 1. Method Detail Method Detail charAt intValue Restituisce il carattere che si trova all’indice specificato. public int intValue() Restituisce il valore intero rappresentato dall’oggetto che esegue il metodo. endsWith public boolean endsWith(String suffix) toString public java.lang.String toString() Restituisce una stringa contenente il numero rappresentato dall'oggetto che esegue il metodo, espresso in lettere. Ad esempio, se l'oggetto che esegue il metodo rappresenta il numero 34, il metodo restituirà la stringa "trentaquattro". Restituisce true se e solo se la stringa che esegue il metodo ha come suffisso la stringa riferita da suffix. equals public boolean equals(String str) Restituisce true se e solo se la stringa che esegue il metodo è uguale a quella riferita da str. equals public boolean equals(Intero n) Restituisce true se e solo se l’oggetto che esegue il metodo rappresenta lo stesso numero intero rappresentato dall’oggetto di cui viene fornito il riferimento tramite l’argomento. java.lang public char charAt(int index) !Class Character Classe involucro corrispondente al tipo primitivo char. Le sue istanze rappresentano caratteri Method Detail isLowerCase public static boolean isLowerCase(char ch) Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera minuscola. isUpperCase public static boolean isUpperCase(char ch) Restituisce true se e solo se il carattere specificato tramite l’argomento è una lettera maiuscola. indexOf public int indexOf(String str) Restituisce l’indice della prima occorrenza, all’interno della stringa che esegue il metodo, della stringa riferita da str. Nel caso questa non sia un fattore della stringa che esegue il metodo, restituisce -1. length public int length() Restituisce la lunghezza della stringa, cioè il numero di caratteri che la compongono. startsWith public boolean startsWith(String prefix) Restituisce true se e solo se la stringa che esegue il metodo ha come prefisso la stringa riferita da prefix. substring public String substring(int beginIndex) Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che esegue il metodo, che si trovano a partire dall’indice specificato dall’argomento. substring public String substring(int beginIndex, int endIndex) prog.utili !Class Sequenza<E> Le sue istanze rappresentano sequenze di oggetti di tipo E, cioè collezioni di oggetti di tipo E che possono contenere duplicazioni. Nelle sequenze gli oggetti compaiono nell'ordine in cui sono stati inseriti. Inoltre una sequenza non può contenere riferimenti null N.B. E’ possible esaminare gli elementi contenuti in un oggetto di tipo Sequenza mediante cicli for-each. Restituisce il riferimento a una nuova stringa formata da tutti i caratteri della stringa che esegue il metodo, che si trovano a partire dall’indice specificato dal primo argomento beginIndex, sino all’indice endIndex – 1. Pertanto il secondo argomento indica la prima posizione da escludere nella nuova stringa.