Scrivere un metodo
List<Integer> merge(Iterator<Integer> a, Iterator<Integer> b) che, dati due iteratori di interi ordinati, ne fonde gli elementi creando una lista ordinata contenente tutti gli elementi degli iteratori di ingresso. La soluzione del problema deve essere ricorsiva, eventualmente usando metodi privati ausiliari, senza usare alcuna istruzione di ciclo.
Ad esempio, se
a=<2,3,5,5,6> e
b=<1,3,4>, la lista prodotta deve essere
<1,2,3,3,4,5,5,6>.
Scrivere un programma di prova per verificare la correttezza del metodo scritto.
[
Soluzione ]
Scrivere un metodo
List<Object> concatenaFiltrando(Iterator<Object> a, Iterator<Object> b, Class c) che, dati due iteratori
a e
b e una classe
c, restituisce una nuova lista ottenuta prendendo prima tutti gli elementi di
a di tipo
c e poi tutti gli elementi di
b di tipo
c. La soluzione del problema deve essere ricorsiva, eventualmente usando metodi privati ausiliari, senza usare alcuna istruzione di ciclo.
Ad esempio, se
a=<"6",6,3,"1",5,9,"3",5,6>,
b=<4,"9",3,4> e
c=Integer.class, la lista prodotta deve essere
<6,3,5,9,5,6,4,3,4>.
Scrivere un programma di prova per verificare la correttezza del metodo scritto.
Scrivere un metodo
boolean uguali(Iterator<Object> a , Iterator<Object> b, Iterator<Object> c) che restituisce
true se le sequenze rappresentate dai tre iteratori sono uguali, e
false altrimenti. La soluzione del problema deve essere ricorsiva, eventualmente usando metodi privati ausiliari, senza usare alcuna istruzione di ciclo.
Scrivere un programma di prova per verificare la correttezza del metodo scritto.
Scrivere un metodo
Nodo converti(Iterator i) che restituisce una SCL con tutti gli elementi di
i (
null se
i non contiene elementi). La soluzione del problema deve essere ricorsiva, eventualmente usando metodi privati ausiliari, senza usare alcuna istruzione di ciclo.
Scrivere un programma di prova per verificare la correttezza del metodo scritto.
Scrivere un metodo
Nodo convertiRovesciato(Iterator i) che restituisce una SCL con tutti gli elementi di
i in ordine rovesciato (
null se
i non contiene elementi). La soluzione del problema deve essere ricorsiva, eventualmente usando metodi privati ausiliari, senza usare alcuna istruzione di ciclo.
Scrivere un programma di prova per verificare la correttezza del metodo scritto.
Scrivere un metodo
Object[] converti(Iterator i) che restituisce un array con tutti gli elementi di
i (un array con zero elementi se
i non contiene elementi). La soluzione del problema deve essere ricorsiva,
senza fare uso di liste di appoggio e senza usare alcuna istruzione di ciclo.
Scrivere un programma di prova per verificare la correttezza del metodo scritto.
Scrivere un metodo statico
boolean componibile(List<Character> l, String s) che, data una lista di caratteri alfabetici (che contempla anche il carattere jolly
'*') ed una stringa, restituisce
true se la stringa può essere composta usando i caratteri della lista, e
false altrimenti. La soluzione deve essere ricorsiva, usando eventualmente metodi privati ausiliari, senza istruzioni di ciclo.
Scrivere la soluzione in modo da poter compilare ed eseguire il seguente programma di prova senza doverlo modificare:
import java.util.*;
class ProvaScarabeo
{
public static void main
(String[] args
) {
List<Character> l1 =
new ArrayList<Character>
();
l1.
add('B'); l1.
add('L'); l1.
add('O'); l1.
add('B'); l1.
add('*'); l1.
add('A'); l1.
add('M');
// B L O B * A M
List<Character> l2 =
new ArrayList<Character>
();
l2.
add('*'); l2.
add('F'); l2.
add('*'); l2.
add('A'); l2.
add('A'); l2.
add('L'); l2.
add('F'); l2.
add('L');
// * F * A A L F L
System.
out.
println(Scarabeo.
componibile(l1,
"bambola") +
"[true]");
System.
out.
println(Scarabeo.
componibile(l1,
"bolla") +
"[true]");
System.
out.
println(Scarabeo.
componibile(l1,
"ambra") +
"[false]");
System.
out.
println(Scarabeo.
componibile(l2,
"affanno") +
"[false]");
System.
out.
println(Scarabeo.
componibile(l2,
"farfalla") +
"[true]");
System.
out.
println(Scarabeo.
componibile(l2,
"affare") +
"[true]");
}
}
Topic di riferimento sul forum.∞
Scrivere un metodo statico
boolean verifica(Iterator<String> i, String s, int k) che, dato un iteratore
i su una lista di stringhe, una stringa
s, e un intero non negativo
k, restituisce
true se
s appare fra le ultime
k stringhe di
i, e
false altrimenti. Ad esempio, dato un iteratore
i sulla lista
["uno", "due", "tre", "quattro", "cinque", "sei"], la stringa
s="cinque" e
k=3, il metodo deve restituire
true perché le ultime
k=3 stringhe della lista sono
["quattro", "cinque", "sei"] e contengono
"cinque".
La soluzione deve essere ricorsiva, eventualmente usando metodi privati ausiliari, senza usare istruzioni di ciclo.
Scrivere un programma di prova per verificare la correttezza del metodo scritto.
Minigara di programmazione: soluzioni e test