Paolo Boldi
Problemi per la lezione del 13/11
- [Interi grandi] La classe
BigInteger
, contenuta nel pacchetto java.math
delle API standard di Java, rappresenta interi con numero di cifre arbitrario: le istanze di questa classe permettono
quindi di manipolare interi senza incorrere nei limiti della rappresentazione degli int
.
Se consultate la documentazione della classe, vedrete che fra gli altri esiste un costruttore che costruisce un
BigInteger
data una stringa (che ne costituisce la rappresentazione in base 10).
Inoltre, ci sono metodi che realizzano tutte le operazioni aritmetiche: notate che la classe è immutabile, e tutti
i metodi indicati creano nuovi oggetti BigInteger
contenenti il risultato dell'operazione e li
restituiscono.
La classe ha un metodo toString()
che restituisce la stringa rappresentante il numero.
Usando la classe BigInteger
, implementate un programma che legga un intero arbitrario e determini se
è primo. Opzionalmente modificatelo, trasformandolo in un programma che ne stampi i fattori primi.
- [Finestre mutanti] Molte delle API standard di Java consentono di realizzare con facilità
delle interfacce grafiche (le cosiddette GUI, Graphical User Interface) basate su menù a tendine, finestre ecc.
In questo esercizio, vi proponiamo di sperimentare una di queste classi.
Le istanze della classe
JFrame
(nel pacchetto javax.swing
)
rappresentano delle finestre grafiche: l'uso tipico prevede che
un'istanza venga creata, popolata (cioè, riempita di oggetti grafici che costituiscono l'interfaccia per
l'utente) e resa visibile. Quando la JFrame
non serve più, la si può distruggere.
Aiutandovi con la documentazione delle API, scrivete un programma che:
- crea una
JFrame
usando il costruttore che vuole come argomento una stringa (il titolo
della finestra);
- la dimensiona: per farlo, dovete usare il metodo
setSize(d)
[noterete che questo metodo non
compare apparentemente nella documentazione della classe JFrame
, ma è uno dei metodi elencati
in fondo come "metodi ereditati" (spiegheremo il significato di questa espressione più avanti)]; il metodo
setSize(d)
vuole come argomento un oggetto d
di tipo Dimension
(classe contenuta nel pacchetto java.awt
): una Dimension
rappresenta una coppia
di interi, che corrispondono alla larghezza e all'altezza della finestra, misurate in pixel (punti grafici);
- la rende visibile: per farlo, invocate il metodo
setVisible(true)
(l'argomento può essere true
o false, a seconda che vogliate rendere la finestra visibile o invisibile);
- la distrugge, invocando il metodo
dispose()
.
Se eseguite il codice, vedrete che la finestra apparirà e scomparirà istantaneamente. Inserite, prima di far scomparire la
finestra, un ciclo for a vuoto con almeno 1000000000 (un miliardo) di cicli che provochi un ritardo.
A questo punto, alterate il codice dopo il ciclo di ritardo, in modo che:
- la finestra venga ridimensionata (chiamando di nuovo il metodo
setSize(d)
, con una dimensione diversa);
- ne venga cambiato il titolo, invocando il metodo
setTitle(s)
che vuole come argomento una stringa (il nuovo
titolo).
Aggiungete un nuovo ciclo di ritardo prima di distruggere la finestra.
- [Finestre erranti] Il metodo
setLocation(x,y)
serve per posizionare una JFrame
:
più precisamente, il metodo indica la posizione sullo schermo dell'angolo in alto a sinistra della finestra; il punto (0,0) è
inteso essere il punto in alto a sinistra dello schermo. Scrivete un programma che visualizzi una JFrame
in posizione
(100,100) e poi, per 1000 volte, ne sposti la locazione in modo casuale, incrementando o decrementando ogni volta le coordinate
x e y di un valore compreso fra -10 e 10; per ottenere un valore pseudo-casuale, invocate Math.random()
(che
restituisce un valore pseudo-casuale nell'intervallo [0,1)). Dopo ogni spostamento, fate un ciclo di ritardo di almeno 1000 passi.
- [Rimpiazzare] La classe String contiene un metodo che consente di rimpiazzare tutte le occorrenze di un certo
carattere, o di una certa stringa, con un altro carattere, o stringa. Trovate questo metodo consultando la documentazione delle API, e poi scrivete un
programma che operi come segue:
- legge due stringhe, diciamo x e y
- inizia quindi un ciclo di lettura di stringhe: ogni volta che legge una stringa, la
stampa dopo aver sostituito tutte le occorrenze di x con y
- quando l'utente inserisce la stringa vuota, il programma termina.