Vostro nomev javax class dialogviewer static void main args
28 Capitolo I
• U n algoritm o che risolve un problem a è una sequenza di passi non am bigua, eseguibile e che term ina in un tem p o finito.
• Lo p seu d o co d ice è una d escrizion e in form ale di una sequ en za di passi ch e risolvon o un problem a.
R I . 2 . Q uali parti di un com puter p osson o contenere il cod ice di un programma? E quali i dati da elaborare o elaborati?
R I . 3 . Q uali parti di un com puter hanno il com p ito di fornire inform azioni all’utente? E quali acquisiscono dati forniti dall’utente?
|
---|
Introduzione 29
R I . 8. Cosa visualizza questo programma? Fate attenzione alle spaziature.
} | } |
---|
R I . 10. Scrivete tre versioni del programma HelloPrinter. java,con errori di sintassi diversi. Scrivetene una versione con un errore logico.
^ Rl.ll. In che m o d o si scoprono gli errori di sintassi? E gli errori logici?
* * | R I . | 13. Scrivete un algoritm o per rispondere a questa dom anda: un con to bancario con tien e |
---|
* * | R I . | 16. N el problem a descritto nei C on sigli pratici 1.1, per confrontare autom obili candidate |
---|
all’acquisto si son o fatte ipotesi sul prezzo del carburante e suH’utilizzo annuale deH’autom obile. In linea teorica, sarebbe m eglio sapere quale vettura sia la m igliore senza dover fare tali ipotesi.
Perché un program ma eseguito al calcolatore non è in grado di risolvere tale problema?
** | R I . | 17. Im m aginate di voler affidare al vostro fratello m inore il com p ito di effettuare la copia |
---|
dom enicale a casa vostra.
R I . 19. G li antichi B abilonesi con oscevan o un algoritm o per calcolare la radice quadrata del
E l . l . Scrivete un program ma che visualizzi un m essaggio di saluto a vostra scelta, magari in una
lingua diversa dall’inglese.
E 1 .4 . Scrivete un program m a che calcoli e visualizzi il saldo di un con to bancario dop o il prim o,
secon d o e terzo anno. Il con to ha un saldo iniziale di $ 1000 e vi ven gon o accreditati annualm ente
I Dave I
★★★ E 1 .6 . Scrivete un programma che scriva il vostro nom e con lettere m olto grandi, com e nell’esem pio
* * | :«c |
|
|||
---|---|---|---|---|---|
|
I " I
I I
conoscete l’artista, fate una ricerca in Internet). Per rappresentare aree di colori diversi usate sequenze
di caratteri diversi, co m e @ @ @ oppure : : :, usando i caratteri - e | per com porre, rispettivam ente,
+-+-+-+
E 1 .1 1 . Scrivete un program ma che visualizzi un anim ale m entre pronuncia un saluto, sim ile a
I I I \ Coder!/
(_ l_ ) .......
E 1 .1 4 . Scrivete un program m a che visualizzi la bandiera degli Stati U n iti d ’A m erica usando
soltanto i caratteri * e =.
{
public static void main(String[] args)
E 1 .1 6 . C opiate ed eseguite il program ma seguente, poi m odificatelo in m od o che visualizzi il
m essaggio “ H ello, nomeV\essendo nomeciò che vien e scritto dall’utente nella finestra di dialogo
public static void main(String[] args)
{
} | } |
---|
32 | ★★★ |
|
---|
prosegua con il m essaggio “M y nam e is H aliW hat w ou ld you like m e to do?” D o p o d ich é ignorate quanto scritto dall’utente e visualizzate in ogni caso il m essaggio seguente (sostituendo Dave con il n om e fornito inizialm ente dall’utente):
* | } |
|
|
---|---|---|---|
Alaska: 0%
Hawaii: 4 %E 1.21 (economia). C onoscere più di una lingua è u n ’abilità m olto im portante nell’attuale m ercato del lavoro e una delle attività più elem entari consiste nel porgere un saluto. Scrivete un program ma che visualizzi una tabella con due colon n e, riportando frasi di saluto: nella prim a colonna la frase in inglese e nella seconda la stessa frase in u n ’altra lingua, a vostra scelta. Se non parlate altre lingue oltre all’inglese, usate un traduttore in Internet o chied ete a un am ico.
Sul sito web dedicato al libro si trova una raccolta di progetti di programmazione più complessi.
• Per visualizzare qualcosa in un fraine, occorre dichiarare una classe ch e estenda la classe
DComponent.
U tilizzo deH'API di Java per disegnare semplici figure
• EllipseZD.Double e LineZD.Double son o classi che descrivono form e grafiche.
j ava.awt.Component getHeight
getHeight getWidth
setTitle java.lang.String
java.awt. geom.EllipseZD.Double length
java.awt.GraphicsZD paintComponent
draw javax.swing.D Frame
R 2 .2 . Fornite tre esem pi di oggetti che appartengono alla classe String. Fornite un esem p io di
oggetto che appartiene alla classe PrintStream. Fornite il n om e di due m etod i che appartengono alla
posto in vendita.
R 2 .5 . C h e valore ha mystery d op o questa sequenza di enunciati?
mystery = mystery + l;
R 2 .6 . C h e errore c ’è in questa sequenza di enunciati?
R 2 .8 . Fornite un esem pio di m etod o che riceve un argom en to di tipo int. Fornite un esem pio
di m etod o che restituisce un valore di tipo int. Fate le stesse c o se con il tipo String.
R 2 .1 1. Scrivete enunciati Java che inizializzino la variabile stringa message con un m essaggio com e
"Hello, World", elim inandovi poi i segni di punteggiatura m ed ian te ripetute invocazioni del m etod o
R 2 .1 4 . Scrivete enunciati Java per costruire gli oggetti così descritti:
|
---|
con gli oggetti appena costruiti.
R 2 .1 6 . Scrivete un enunciato Java che inizializzi una variabile square con un rettangolo il cui vertice
ciano riferim ento al m edesim o quadrato, i cui lati abbiano tutti lunghezza 40 e il cui centro sia
posizionato nel punto di coordinate (20, 20).
r.translate(l5, 25);
d. r = new Rectangle();
R 2 .2 0 . C onsultate la d ocu m entazione API per scoprire m etodi per
• concatenare due stringhe, cio è costruire una stringa costituita dalla prim a stringa, seguita dalla seconda;
• elim inare da una stringa gli eventuali spazi iniziali e finali;
• convertire un rettangolo in una stringa;
• individuare il più p iccolo rettangolo che con tien e due rettangoli dati;
• restituire un num ero casuale in virgola m obile.Per la soluzione di ciascun problem a, citate il n om e del m etod o identificato e la classe in cui èdefinito, il suo valore restituito e i tipi dei suoi parametri.
★★ R 2 .2 5 (g r a fic a ). A cosa serve un contesto grafico?
★★ R 2 .2 6 (g r a fic a ). Perché nei program m i grafici usiam o classi separate per i com p on en ti e per la loro visualizzazione?
per poi sostituirvi E2.3. Scrivete un program ma che inizializzi una stringa al valore "Mississippi",
tutte le lettere "i" con "ii", visualizzando infine la lunghezza della stringa ottenuta. In tale stringa, poi, si sostituiscono tutte le stringhe "ss" con "s", visualizzando di nuovo la lunghezza della stringa così ottenuta.E 2 .4 . Scrivete un program ma che costruisca un rettangolo avente area 42 e un rettangolo avente perim etro 42, visualizzando larghezza e altezza di entram bi.
E2.6 (collaudo). Scrivete il program m a ReplaceTester che codifichi una stringa sostituendo, m ediante il m eto d o replace, tutte le lettere "i" con "!" e tutte le lettere "s" con Fate vedere che riuscite a codificare correttam ente la stringa "Mississippi", visualizzando il risultato prodotto e quello previsto.
E2.7. Scrivete il program ma HollePrinter che scam bi tra loro le lettere "e" e "o" in una stringa, usando ripetutam ente il m etod o replace. Fate vedere che la stringa "Hello, World!" si trasforma in "Holle, Werldi" .
public class BrighterDemo
{
public static void main(String[] args)
{
!Frame frame = new DFrame();
frame.setSize(200, 200);
Color myColor = ... ;
frame.getContentPane().setBackground(myColor);
frame.setDefaultCloseOperation(D Frame.EXIT_0N_CL0SE);
} | } |
|
---|
Utilizzareoggetti 83
E2.17. U sando la classe Picture vista nella sezion e Esem pi com pleti 2.2, scrivete il program ma DoubleSizePicture che carichi una figura e la visualizzi con una dim ension e pari al dop pio di quella originale, centrata all’interno della finestra.
E2.18 (grafica). Scrivete un program m a grafico che disegni due quadrati aventi il m edesim o centro. Progettate la classe TwoSquareViewer e la classe TwoSquareComponent.
Sul sito Web dedicato al libro si trova una raccolta di progetti di programmazione più complessi.
132 | Capitolo 3 | • |
---|
• I costruttori im postano i valori iniziali per i dati degli oggetti.
• Il n om e di un costruttore è sem pre uguale al n om e della classe.
Implementazione di una classe
• L’im p lem en tazion e privata di una classe com pren de le variabili di esem plare e il corp o di
• Per collaudare una classe si usa un am biente interattivo oppure si scrive una classe di test che
esegua istruzioni di collaudo.
• Le variabili locali son o dichiarate nel corp o di un m etod o.
• Q uan do un m etod o term ina la propria esecu zione, le sue variabili locali scom paiono.
di esem plare del parametro im plicito.
• Il riferim ento th is rappresenta il parametro im plicito.
Realizzazione di classi che disegnano forme complesse
• Creare una classe per ogni porzion e di figura che possa essere utilizzata più volte è u n ’ottim a
stessa?
R 3 .4 . C onsiderate una classe Grade che rappresenti un voto, in lettere, com e A + o B, secon d o le consu etu dini anglosassoni. D elineate due diverse scelte per le variabili di esem plare da usare per realizzarla.
R 3 .5 . C onsiderate una classe Time che rappresenti un istante di tem po, com e le 9 del m attino (9 a.m ., nel m on d o anglosassone) o le 3 .3 0 del p om eriggio (3.30 p.m .). D elin eate due diversi insiem i di variabili di esem plare che si potrebbero usare per realizzarla.
C o n se g u e n te m e n te , se lo to g lia m o d all’in terfaccia p u b b lica, c o m e si p u ò o tten er e un o g g e tto di tip o BankAeeount co n il saldo iniziale voluto?
b. A l co n tra rio , p o tr e m m o to g liere il co stru tto re BankAccount() e m ettere a d isp o siz io n e soltan to BankAeeount(double initialBalanee)?
R 3 .1 3 . C osa fa il m etod o seguente? Fornite un esem p io di com e si potrebbe invocare il m etod o.
public class BankAccount
{
public void mystery(BankAccount that, double amount)
{
this.balance = this.balance - amount;
} | } | |
---|---|---|
134 Capitolo 3
esiste un altro m etod o che fornisce il valore del saldo. In un con to di questo tipo non è possibile versare ulteriori fondi d op o l’apertura. Infine, occorre progettare un m etod o withdraw che preleva l’intero am m ontare del saldo: non son o consentiti prelievi parziali.
} | } |
|
---|
Perché non è una buona idea usare una variabile di esem plare per m em orizzare l’area del quadrato? M odificate la classe in m o d o che area sia una variabile locale.
} |
---|
public int getAreaO { return area; }
} |
|
---|
R 3 .2 0 . U sando la tecnica di analisi descritta nel Paragrafo 3.5, studiate il program m a presentato nella sezion e C onsigli pratici 3.1.
R3.24 (grafica). Spiegate per quale motivo nella classe CarComponent le invocazioni dei metodi getWidth e getHeight non hanno parametri espliciti.
R3.25 (grafica). Come modifichereste la classe Car per poter visualizzare automobili di dimensioni diverse?
^ |
---|
^ |
|
---|
public void setLimit(int maximum)
** | E3.3. Simulate un circuito elettrico che controlla la lampada di un corridoio, con interruttori alle due estremità del corridoio stesso. Ciascun interruttore può trovarsi in una di due posizioni (su o giù, Up O down) e la lampada può essere accesa o spenta {on o ojj). lì cambiamento di stato di uno qualsiasi dei due interruttori provoca il cambiamento di stato della lampada. Progettate i metodi: |
---|
public void toggleSecondSwitchO // cambia lo stato del secondo interruttore
public int get LampStateO
public void toggleSwitch(int switch) // cambia lo stato di un interruttore
che aggiunga al saldo del conto gli interessi, calcolati con il tasso fornito come parametro. Ad esempio, dopo l’esecuzione di questi enunciati
BankAccount momsSavings = new BankAccount(IOOO);
String.valueOf(prezzo).
E3.10. Dopo la chiusura, il gestore di un negozio vorrebbe conoscere il volume totale di vendite effettuate nella giornata: modificate la classe CashRegister in modo che sia in grado di farlo, dotandola dei metodi aggiuntivi getSalesTotal e getSalesCount,che restituiscono, rispettivamente, l’incasso totale e il numero totale di scontrini emessi, oltre al metodo reset che azzera tutti i contatori utilizzati, in modo che le operazioni funzionino correttamente il giorno successivo.
e i metodi:
public String getName()
public double getSalaryO
public void raiseSalary(double byPercent)Ecco un esempio di utilizzo:
Car myHybrid = new Car(SO); // 50 miglia per gallone
myHybrid.addCas(20); // aggiungi 20 galloni di carburante
myHybrid.drive(lOO); // viaggia per 100 miglia
double gasLeft = myHybrid.getCasInTank()); // carburante rimasto
Potete ipotizzare che il metodo drive non venga mai invocato per una distanza maggiore di quella percorribile con il carburante disponibile. Progettate anche la classe CarTester che collaudi tutti i metodi.
public void addLine(String line)
Progettate un altro metodo che restituisca l’intero testo della lettera:
138 Capitolo 3
ultima riga del contenuto della lettera
Progettate anche il program ma di collaudo LetterPrinter che visualizzi questa lettera:
Dear Dohn :
In esso, costruite un esemplare della classe Letter e invocate due volte il m etodo addLine.
Suggerimenti:(1) U sate il m etod o concat per costruire una stringa più lunga a partire da due stringhe
E 3 .1 5 . R ealizzate la classe Bug che rappresenti un insetto che si sposta lun go una linea orizzontale,
verso sinistra o verso destra. Inizialm ente si sposta verso destra, ma pu ò cam biare direzione; ogni
public void turn() // cambia direzione
public void move() // si sposta di un'unità nella direzione attuale
bugsy.turn(); // cambia direzione
bugsy.moveO; // ora si trova nella posizione 10
sorgente lum inosa, la sua nuova posizion e vien e a trovarsi a m età strada tra quella precedente e la
posizione della sorgente lum inosa. D otate la classe di un costruttore:
Realizzareclassi 139
E 3 .2 0 (g r a fic a ). M igliorate l’esercizio precedente dotando la classe House di un costruttore che consenta di specificare posizione e dim ensione della casa da visualizzare, quindi popolate lo scherm o con un p o ’ di case di varie dim ensioni.
E 3 .2 1 (g r a fic a ). M odificate il program m a che disegna autom obili visto nel Paragrafo 3.8 in m od o che le autom obili vengano visualizzate in colori diversi. O gn i oggetto di tipo Car deve m em orizzare il proprio colore. Scrivete le classi Car e CarComponent m odificate.
140 Capitolo 3
E 3 .2 5 (g r a fic a ). C ostruite un grafico a barre per rappresentare i dati seguenti:
Delaware M em orial 2150
M ackinac 3800
T ipididatifondamentali 185
pow
round
sin
sqrt
tan
toDegrees
toRadians
java.lang.String
charAt
length
substring
java.lang.System
in
java.math.BigDecimaleventualm ente dichiarando costanti quando tale scelta sia ritenuta adeguata.
a. Il num ero di giorni in una settimana
int mystery = 1;
mystery = 1 - 2 * mystery;
int mystery = 1 - 2 * mystery;
R 4 .4 . Scrivete in notazione m atem atica le seguenti espressioni Java.
★★ | a. | ||||||
---|---|---|---|---|---|---|---|
b. | |||||||
c. | |||||||
d. | |||||||
|
|||||||
|
|||||||
\ |
|
||||||