




























































































Studia grazie alle numerose risorse presenti su Docsity
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
Prepara i tuoi esami
Studia grazie alle numerose risorse presenti su Docsity
Prepara i tuoi esami con i documenti condivisi da studenti come te su Docsity
Trova i documenti specifici per gli esami della tua università
Preparati con lezioni e prove svolte basate sui programmi universitari!
Rispondi a reali domande d’esame e scopri la tua preparazione
Riassumi i tuoi documenti, fagli domande, convertili in quiz e mappe concettuali
Studia con prove svolte, tesine e consigli utili
Togliti ogni dubbio leggendo le risposte alle domande fatte da altri studenti come te
Esplora i documenti più scaricati per gli argomenti di studio più popolari
Ottieni i punti per scaricare
Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium
ESERCIZI FONDAMENTI DI INFORMATICA JAVA
Tipologia: Esercizi
1 / 166
Questa pagina non è visibile nell’anteprima
Non perderti parti importanti!





























































































Per i neofiti della materia, la programmazione, ovvero la scrittura di programmi in un linguaggio di programmazione, può essere tanto ostica quanto di difficile comprensione: la mentalità e la logica con cui un programmatore affronta un problema è, spesso, molto diversa da quella usata nella realtà. Concetti come classi, metodi, costruttori o variabili possono sembrare oscuri ai più, ma un buon metodo di studio e, soprattutto, una continua pratica sulla materia possono facilitare il superamento delle difficoltà iniziali. E’ con quest’intento che nasce il seguente eserciziario: introdurre una materia le cui potenzialità sono facilmente riscontrabili nella vita odierna, in cui la tecnologia la fa da padrona. Soprattutto il linguaggio Java: disponibile gratuitamente sulla Rete, esso permette la creazione di applicazioni eseguibili su un’ampia gamma di computer e di sistemi operativi diversi e, soprattutto, è divenuto lo standard per lo sviluppo delle applicazioni integrate nelle pagine del World Wide Web, o meglio conosciuto come Internet, o di dispositivi quali cellulari o qualsiasi sistema che si basi su un controllo informatico, come i GPS e sensori. Molti degli esercizi presenti in codesto testo sono stati ricavati dal libro adottato a lezione: “Concetti di informatica e fondamenti di Java” (Cay H. Horstmann, Apogeo Edizioni). Altri, invece, sono esercitazioni proposte in laboratorio dal docente Giorgio Satta (per maggiori informazioni, si rimanda alla sua pagina
L’eserciziario, in ogni caso, non potrà mai sostituire le nozioni espresse in classe o nel libro di testo: esso è una guida che, come Virgilio nella Divina Commedia, accompagna gli studenti all’approfondimento del linguaggio Java.
L’eserciziario è suddiviso in tre parti fondamentali:
Bressan Marco (Brex) Da Giau Alessandro(Frollo) Dal Maso Alberto Fioretto Giulio (700hz) Gallo Amanda (Fly) Gecchele Stefano (Crystal) Obradovic Tijana (One) Ronchi Fabrizio Zulian Marco (Zuzi) Zecchin Giulia (Star) Maculan Marco (Marcus Mclan)
(Paragrafo 1.3)
(Paragrafo 1.4)
(Paragrafo 1.7) Errori
Esercizio 1.1 – HelloTester.java Testo: Scrivere un programma che stampi sullo schermo il messaggio “Hello, World!”.
Consigli: /
public class HelloTester { public static void main(String[] args) { // sullo schermo, viene stampato un messaggio di saluti System.out.println("Hello, World"); } }
Esercizio 1.2 – Dave.java (Esercizio P1.1 pag. 25) Testo: Scrivere un programma che visualizzi sullo schermo del terminale il vostro nome all’interno di un rettangolo, come nell’esempio seguente:
| Dave |
Consigli: /
public class Dave
(^1) APPLET: Applicazioni java che vengono eseguite all'interno di broswer web. Servono per visualizzare oggetti
dinamici che altrimenti con l'html sarebbero difficili da mostrare. Per visualizzarli serve la JVM.
public static void main(String[] args) { // si stampa la cornice System.out.println("+ - - +"); // si stampa il nome System.out.println("| Dave |"); // si stampa la cornice System.out.println("+ - - +"); } }
Esercizio 1.3 – Fcentrata.java Testo: Scrivere un programma che visualizzi sullo schermo del terminale la vostra iniziale grande e centrata composta da molti caratteri uguali.
public class Fcentrata { public static void main(String[] args) { System.out.println(" FFFFFFFFFFFFF"); System.out.println(" FFFFFFFFFFFFF"); System.out.println(" FFF"); System.out.println(" FFF"); System.out.println(" FFFFFFFFFF"); System.out.println(" FFFFFFFFFF"); System.out.println(" FFF"); System.out.println(" FFF"); System.out.println(" FFF"); System.out.println(" FFF"); } }
(Paragrafo 2.1) Tipi di variabili:
(Paragrafo 2.2) Operatore di assegnazione
(Paragrafo 2.4) Parametri e valori restituiti dai metodi
b = base; h = altezza; x = ascissa; y = ordinata; } /* si acquisisce la base @return la base del rettangolo / public int getBase() { return b; } / si acquisisce l'altezza @return l'altezza del rettangolo / public int getAltezza() { return h; } / si acquisisce l'ascissa @return l'ascissa del rettangolo / public int getAscissa() { return x; } / si acquisisce l'ordinata @return l'ordinata del rettangolo / public int getOrdinata() { return y; } / si modifica la base @param nuovaBase la nuova misura della base/ public void setBase(int nuovaBase) { b = nuovaBase; } / si modifica l'altezza @param nuovaAltezza la nuova misura dell'altezza/ public void setAltezza(int nuovaAltezza) { h = nuovaAltezza; } / si modifica l'ascissa @param nuovaAscissa la nuova ascissa/ public void setAscissa(int nuovaAscissa) { x = nuovaAscissa; } / si modifica l'ordinata @param nuovaOrdinata la nuova ordinata/ public void setOrdinata(int nuovaOrdinata) { y = nuovaOrdinata; } / si traslano le coordinate nel piano @param trX lo spostamento in ascissa @param trY lo spostamento in ordinata/ public void traslazione(int trX, int trY) { x = x + trX; y = y + trY; } / si calcola il perimetro
@return il perimetro / public int getPerimetro() { return (b + h)2; } /* si calcola l'area @return l'area */ public int getArea() { return b * h; } }
RettangoloTester.java
public class RettangoloTester { public static void main(String[] args) { Rettangolo r = new Rettangolo(); System.out.println("Perimetro: " + r.getPerimetro()); System.out.println("Area: " + r.getArea()); System.out.println("Expected perimetro: 4"); System.out.println("Expected area: 1"); Rettangolo rr = new Rettangolo(5, 3, 9, 2); System.out.println("Perimetro: " + rr.getPerimetro()); System.out.println("Area: " + rr.getArea()); System.out.println("Expected perimetro: 16"); System.out.println("Expected area: 15"); } }
Esercizio 2.2 – Dado.java (Esercizio P2.7 pag. 53) Testo: Scrivere un programma che usi la classe Random per simulare il lancio di un dado, visualizzando un numero casuale compreso tra 1 e 6 ogni volta che viene eseguito.
Consigli: Il seguente programma può essere di difficile comprensione ai neofiti della materia perché viene introdotta la classe Random. Essa, come molte altre classi (Scanner, Rectangle), deve essere importata dalla libreria virtuale di Java, tramite la dicitura "import nomePacchetto.nomeClasse". Si rimanda al ripasso del capitolo 2 l’approfondimento dell’importazione di classi.
Dado.java
import java.util.Random ;
public class Dado { private int numeroFacce; private Random gen;
//costruttore che crea un dado standard a 6 facce public Dado() { numeroFacce = 6; // si inizializza l'oggetto gen della classe Random gen = new Random();
Esercizio 3.1 – BankAccount.java (Esercizio P3.1 – P3.2 pag. 86) Testo: Es. 3.1: scrivere un programma che costruisca un conto bancario chiamato harrysChecking, versi in esso $1000, prelevi da esso $500, prelevi altri $400 e infine visualizzi il saldo rimanente. Il programma deve poi creare un altro conto bancario chiamato momsSaving, utilizzando il costruttore che inizializza la variabile bilance. Su quest’ultimo conto deve essere poi applicato un interesse del 10%, a seguito del quale viene stampato il saldo.
Consigli: Il programma non presenta particolari difficoltà. Si invita a rivedere i consigli dell’esercizio sul rettangolo.
public class BankAccount { private double balance; // si costruisce un conto bancario con saldo uguale a zero public BankAccount() { balance = 0; } /* si costruisce un conto bancario con un saldo assegnato @param initialBalance il saldo iniziale/ public BankAccount(double initialBalance) { balance = initialBalance; } / si versa denaro nel conto bancario @param amount l'importo da versare/ public void deposit(double amount) { balance = balance + amount; } / si preleva denaro dal conto bancario @param amount l'importo da prelevare/ public void withdraw(double amount) { balance = balance - amount; } / s’ispeziona il valore del saldo attuale del conto bancario @return il saldo attuale/ public double getBalance() { return balance; } / si calcola un interesse sul conto @param rate il tasso d'interesse*/ public void addInterest(double rate) { balance = balance + ((balance * rate) / 100); } }
BankAccountTester.java
public class BankAccountTester { public static void main(String[] args) { BankAccount harrysChecking = new BankAccount(); harrysChecking.deposit(1000); harrysChecking.withdraw(500); harrysChecking.withdraw(400); System.out.println(harrysChecking.getBalance()); BankAccount momsSaving = new BankAccount(1000); momsSaving.addInterest(10); //Interessi al 10% System.out.println("Dollars: " + momsSaving.getBalance()); } }
Esercizio 3.2 - BankWithPassword
Testo: Lo scopo del programma è riadattare il programma presente nel libro di testo, introducendo il metodo boolean controlloPassword, che restituisce true se la password inserita corrisponde a quella del conto corrente cercato, e il metodo boolean controlloPrelievo, che restituisce true se la somma inserita è disponibile nel conto corrente.
Consigli: Nel metodo controlloPassword viene utilizzato il costrutto if, che verrà spiegato in dettaglio nei capitoli successivi. In breve, il comando if(…) esegue l’operazione successiva solo se “l’affermazione” contenuta nelle parentesi è vera.
BankWithPassword.java
public class BankWithPassword { private double balance; private int password;
/si costruisce un conto con saldo uguale a zero e password di accesso numerica @param pass password numerica di accesso al conto/ public BankWithPassword(int pass) { balance = 0; password = pass; }
/si costruisce un conto con un saldo assegnato e password di accesso @param initialBalance il saldo iniziale @param pass password di accesso al conto/ public BankWithPassword(double initialBalance, int pass) { balance = initialBalance; password = pass; }
/* si versa denaro nel conto bancario @param amount l'importo da versare*/ public void deposit(double amount) { balance = balance + amount;
//si costruisce un primo conto con saldo iniziale pari a zero e //password definita dall’utente System.out.println("Inserire un numero che sarà password del conto 1"); BankWithPassword conto1 = new BankWithPassword(in.nextInt()); //stampa di verifica dei dati inseriti System.out.println("Il saldo del conto 1 è: " + conto1.getBalance()
Esercizio 3.3 – Car.java (Esercizio P3.6 pag. 87) Testo:
Progettare e realizzare una classe Car(automobile) con le proprietà seguenti. Un’automobile ha una determinata resa del carburante (misurata in miglia/galloni o in litri/chilometri: scegliete il sistema che preferite) e una certa quantità di carburante nel serbatoio. La resa è specificata dal costruttore e il livello iniziale del carburante è a zero. Fornire questi metodi: un metodo drive per simulare il percorso di un’automobile per una certa distanza, riducendo il livello di carburante nel serbatoio; un metodo getGas, per ispezionare il livello corrente del carburante; un metodo addGas per far rifornimento.
Consigli: S’invita a porre particolare attenzione al metodo drive(double km), che calcola il livello di carburante dopo un certo percorso.
public class Car { // quantità di carburante nel serbatoio private double gas; // prestazioni della vettura private double kmL; // si costruisce un'automobile con carburante uguale a zero public Car(double resa) { kmL = resa; gas = 0; } /* Calcola il livello di carburante rimasto dopo un certo percorso @param km i chilometri percorsi/ public void drive(double km) { gas = gas - (km / kmL); } / ispeziona il livello di carburante rimasto @return il carburante rimasta/ public double getGas() { return gas; } / aggiunge carburante nel serbatoio @param rifornimento il carburante da aggiungere*/ public void addGas(double rifornimento) { gas = gas + rifornimento; } }
CarTester.java public class CarTester { public static void main(String[] args) { Car ibiza = new Car(20); ibiza.addGas(20); ibiza.drive(100); System.out.println(ibiza.getGas()); } }
Esercizio 3.3 b – Car.java Testo: Modificate la classe Car dell'esercizio precedente aggiungendo una nuova variabile d'istanza String carburante. Se tale variabile vale "verde", allora l'automobile consuma benzina verde, se tale variabile vale "gasolio", allora l'automobile consuma gasolio. Scrivere inoltre un nuovo metodo predicato boolean
Esercizio 3.3 c – DistributoreBenzina.java Testo: Progettare una classe di nome DistributoreBenzina, per rappresentare un distributore di carburante per automobili. Tale classe prevede due variabili d'istanza. La prima variabile d'istanza e' chiamata deposito, e' di tipo double, e contiene il quantitativo di benzina disponibile al distributore. La seconda variabile d'istanza e' chiamata euroPerLitro, e' di tipo double, e rappresenta il prezzo della benzina, espresso in euro per litro. La classe deve implementare un costruttore public DistributoreBenzina(double unPrezzoPerLitro), che prende come parametro esplicito il prezzo in euro per un litro di benzina. La quantita' iniziale di benzina disponibile e' zero. La classe deve inoltre implementare i seguenti metodi. Un metodo definito come public void rifornisci(double unaQuantita), che rifornisce il distributore di benzina. Un metodo definito come public void vendi(double euro), che vende una quantita' di benzina corrispondente all'ammontare di euro pagato, specificato dal parametro esplicito del metodo. Infine, un metodo definito come public void aggiorna(double unPrezzoPerLitro), che aggiorna il prezzo della benzina.
public class DistributoreBenzina {
//variabile d'istanza quantitativo disponibile al distributore private double deposito; //variabile d'istanza prezzo della nenzina private double euroPerLitro; //costruosci la classe DistributoreBenzina public DistributoreBenzina (double unPrezzoPerLitro) { euroPerLitro = unPrezzoPerLitro; deposito = 0; } /rifornisci di benzina il deposito @param unaQuantita quantità rifornita/ public void rifornisci(double unaQuantita) { deposito = deposito + unaQuantita; } /il deposito diminuisce @param euro quantitavi in euro venduto/ public void vendi(double euro) { deposito = deposito - euro/euroPerLitro; } /aggiorna il prezzo della benzina @param aggiorna il nuovo prezzo di un litro/ public void aggiorna(double unPrezzoPerLitro) { euroPerLitro = unPrezzoPerLitro; } public double getBenzina() { return deposito; } }
public class DistributoreBenzinaTester {
public static void main(String[] args) { DistributoreBenzina esso = new DistributoreBenzina(1.20); esso.rifornisci(1000.0); esso.vendi(70.0);
System.out.println(esso.getBenzina()); System.out.println("Expected: 940"); esso.vendi(30.0); System.out.println(esso.getBenzina()); System.out.println("Expected: 910"); esso.aggiorna(1.30); esso.vendi(20.0); System.out.println(esso.getBenzina()); System.out.println("Expected: 901.2821"); } }
Esercizio 3.3 d – DistributoreBenzina.java
Testo: Modificare la classe DistributoreBenzina, assegnata nell’esercizio precedente, in modo che il distributore abbia due pompe, una di benzina verde ed una di gasolio. Ciascun tipo di carburante ha il suo costo per litro. Conseguentemente, dovrete raddoppiare il metodo rifornisci: dovrete avere un metodo per rifornire la benzina verde ed un metodo per rifornire il gasolio. Il metodo vendi deve essere modificato nel seguente modo: public void vendi(double euro, Car unaAutomobile). Tale metodo rifornisce l'automobile specificata come parametro esplicito nel modo appropriato (verde oppure gasolio).
Consigli: Nel Tester create varie automobili e distributori. Fate compiere alcuni "viaggi" alle automobili, e rifornitele di benzina in modo appropriato. Inoltre, rifornite le pompe di benzina in caso di necessita'.
Distributore Benzina.java
public class DistributoreBenzina {
//variabile d'istanza quantitativo disponibile al distributore private double deposito; //variabile d'istanza prezzo della benzina private double euroPerLitro; //variabile d'istanza tipo di benzina private String carburante;
//costruosci la classe DistributoreBenzina public DistributoreBenzina (double unPrezzoPerLitro,String aCarburante) { carburante = aCarburante; euroPerLitro = unPrezzoPerLitro; deposito = 0; } /rifornisci di benzina il deposito @param unaQuantita quantità rifornita/ public void rifornisciVerde(double unaQuantita) { deposito = deposito + unaQuantita; } /rifornisci di benzina il deposito @param unaQuantita quantità rifornita/ public void rifornisciGasolio(double unaQuantita) { deposito = deposito + unaQuantita; } /il deposito diminuisce @param euro quantitativi in euro venduto/
gas.vendi(20,golf);
golf.drive(10); System.out.println("l'auto ha ancora " + golf.getGas() + "litri"); System.out.println("il distributore ha ancora " + gas.getGas() + "litri"); } }
Esercizio 3.4 – Employee.java (Esercizio P3.4 – Esercizio P3.5 pag. 87) Testo: Esercizio 3.4: Progettare e realizzare una classe Employee(dipendente). Ciascun dipendente ha un nome (di tipo stringa) e uno stipendio (di tipo double). Scrivere un costruttore senza parametri, un costruttore con due parametri (nome e stipendio), e i metodi per conoscere nome e stipendio. Scrivere un breve programma per collaudare la classe. Esercizio 3.5: Sviluppare la classe dell’esercizio precedente, aggiungendo un metodo raiseSalary(double byPercent), che incrementi lo stipendio del dipendente secondo una certa percentuale
Consigli: Il libro vorrebbe che si facessero due costruttori: uno con i parametri e uno senza parametri. È preferibile fare un costruttore senza parametri e in seguito impostare i valori dei campi con dei metodi (setNome(), setStipendio()). Il seguente esercizio è simile a quelli precedenti. Lo scopo risulta semplicemente acquisire una metodologia di lavoro. Da notare che inizialmente al nome viene fatto assumere il valore null: Questo particolare valore verrà spiegato dettagliatamente nei capitoli successivi.
public class Employee { private String nome; private double stipendio; public Employee() { nome = null; stipendio = 0; } /* si restituisce il nome del dipendente @return il nome del del dipendente/ public String getNome() { return nome; } / si restituisce lo stipendio del dipendente @return lo stipendio/ public double getStipendio() { return stipendio; } / si modifica il valore di stipendio @param s il nuovo valore dello stipendio/ public void setStipendio(double s) { stipendio = s; } / si modifica il valore di nome @param s il nuovo nome*/ public void setNome(String n) { nome = n; }
/* s’incrementa lo stipendio del dipendente @param byPercent il tasso di aumento dello stipendio*/ public void raiseSalary (double byPercent) { stipendio = stipendio + ((stipendio * byPercent) / 100); } }
public class EmployeeTester { public static void main(String[] args) { // si crea un oggetto di classe Employee Employee d = new Employee(); // si crea un nuovo dipendente d.setNome("Rossi"); // s’inserisce il valore dello stipendio d.setStipendio(1000); // s’incrementa del 10% lo stipendio d.raiseSalary(10); // si restituiscono i valori richiesti System.out.println(d.getNome() + " = " + d.getStipendio()); } }
(Paragrafo 4.1) Tipi di numeri
(Paragrafo 4.2) Costanti
(Paragrafo 4.4) Aritmetica e funzioni matematiche
(Paragrafo 4.5) Invocare metodi statici