Esercizi Java
Sommario
Sintassi di base
Gli esercizi sono gli stessi della programmazione C++: https://cipiaceinfo.it/docs/programmazione/esercizi-programmazione/esercizi-c-c-2/ con le dovute differenze di linguaggio (i/o, passaggio per valore/riferimento, stringhe, gestione files, struct). Si suggeriscono esercizi solo sui costrutti di base.
Oggetti e classi
- Definire una classe
Personacon attributinomeecognome; creare un oggetto di questa classe nelmaine stampare i valori degli attributi. - Creare una classe
Studentecon attributinome,matricolaevoto. Nelmaincreare due oggettiStudentee stampare i rispettivi attributi. - Aggiungere un costruttore alla classe
Studenteper inizializzarenome,matricolaevoto. Testare la classe creando un oggetto tramite il costruttore. - Creare una classe
Librocon attributititoloeautore, fornendo sia un costruttore completo sia un costruttore vuoto (default). Nelmainverificare il funzionamento di entrambe le versioni. - Nella classe
Studenteaggiungere un metodostampaInfo()per visualizzare tutte le informazioni dello studente. Utilizzare il metodo nelmain. - Aggiungere un metodo
aggiornaVoto(int nuovoVoto)per aggiornare il voto di uno studente. Testare il metodo con un oggetto. - Creare un array di 5 oggetti
Studente, inizializzarli con valori diversi e stampare le loro informazioni utilizzando un ciclofor. - Creare una classe
Studentecon costruttore vuoto e attributi privatinome,matricolaevotoe relativi getter e setter pubblici. Nelmaincreare due oggettiStudentee stampare i rispettivi attributi pubblici. - Creare una classe
Librocon attributi privatititoloeautore, fornendo un costruttore completo, e solo getter pubblici . Nelmainverificare il funzionamento di entrambe le versioni. - Aggiungere alla classe
Studenteuna variabilestatic int numeroStudentiper contare il numero di oggetti creati. Nel main far inserire un numero di studenti a piacimento fino a quando l’utente non ne vuole inserire di nuovi. Al termine stampare la lista degli studenti e il loro numero. - Definire una classe
MathUtilscon un metodo staticocalcolaMedia(int a, int b)che restituisca la media dei due valori. Utilizzare il metodo nelmain. - Nel metodo setter del voto verificare che il valore sia compreso tra 0 e 30; se il valore non è valido, non modificarlo e visualizzare un messaggio di errore.
- Creare una classe
Corsocon attributinomeCorsoe una lista diStudenteiscritti. Implementare i metodiaggiungiStudente(Studente s)estampaStudenti(). Le due classi devono appartenere a due package differenti. - Modificare la classe
Studentein modo che contenga anche il riferimento al corso frequentato. Verificare il funzionamento creando istanze diStudenteeCorso. Usare sempre package differenti. - Realizzare un semplice sistema di gestione di una biblioteca mediante le classi
Libro,UtenteePrestito. Nelmainsimulare il prestito di libri e stampare l’elenco dei prestiti effettuati. Inserire un insieme significativo di almeno 10 libri e 5 utenti, con almeno 5 prestiti.deve avere un package diverso daUtenteLibroePrestito. - Modificare l’esercizio precedente: aggiungere a
Libroun attributo statico privatocontatore, che viene incrementato ogni volta che viene creato un libro. E’ presente poi un attributo privato non staticoid, con getter pubblico che prende il valore del contatore ad ogni creazione di un nuovo libro. Nel main creare poi un duplicato dei libri da 1 a 5, usando la deep copy. I nuovi libri dovranno avere titolo ed autore identici agli originali, maiddifferente.
Classi libreria Java
- Creare un programma che mostri il testo “Java Library Demo” usando
System.out.println(). - Utilizzare la classe
Stringper concatenare due stringhe e stampare il risultato (es. nome e cognome). - Creare una stringa e stampare la lunghezza della stessa usando un metodo della classe
String. - Utilizzare il metodo
toUpperCase()diStringper convertire una frase in maiuscolo e visualizzarla. - Usare
Math.abs()per calcolare il valore assoluto di un numero negativo e stamparlo. - Usare
Math.max()eMath.min()per trovare e stampare il massimo e il minimo tra due numeri. - Calcolare la potenza di un numero usando
Math.pow()e stampare il risultato. - Generare un numero casuale tra 0 e 100 utilizzando
Math.random()e stamparlo. - Importare la classe
Scanner, leggere un intero da console e visualizzare il numero inserito. - Utilizzare
Scannerper leggere due numeri interi e stampare la loro somma. - Usare
Scannerper leggere una riga di testo e poi visualizzarla con un messaggio personalizzato. - Leggere da tastiera due numeri reali (
double) conScannere stampare il risultato della loro moltiplicazione. - Creare una stringa tramite
Stringe usarecharAt()per estrarre e stampare il primo carattere. - Dato un numero
double, usareMath.round()per arrotondarlo all’intero più vicino e stampare il risultato. - Leggere un intero positivo con
Scannere stampare tutti i numeri da1a quel valore usando un ciclo (ad es.for) - Creare un programma che provi a leggere il contenuto di un file di testo chiamato
input.txte lo stampi a schermo. Gestire l’eventuale errore di file non trovato usandotryecatch. - Scrivere un programma che chieda all’utente una frase e la salvi in un file
output.txt. Gestire eventuali errori di scrittura mediantetry–catch. - Creare un programma che legga un numero intero da un file
numero.txte ne stampi il doppio. Gestire le possibili eccezioni dovute all’assenza del file o al formato non valido del contenuto. - Scrivere un programma che copi il contenuto del file
origine.txtnel filedestinazione.txt, gestendo tutte le possibili eccezioni contry–catch. - Creare un programma che legga tutte le righe di un file
nomi.txte conti quante righe sono presenti nel file. Gestire eventuali errori di apertura del file contry–catch.
Ereditarietà
- Definire una classe
Animalecon un metodoemettiSuono()che stampa un messaggio generico. Creare una sottoclasseCaneche estendeAnimalee che sovrascriveemettiSuono()stampando un verso specifico. - Creare una classe
Veicolocon attributovelocitae un metodostampaVelocita(). Definire una classeAutoche estendeVeicoloaggiungendo un attributomarca. Testare la creazione di un oggettoAutoe la stampa dei suoi valori. - Realizzare una classe
Personacon attributinomeecognomee un metododatiPersona(). Creare una sottoclasseStudenteche aggiunge un attributomatricolae sovrascrivedatiPersona()per includere anche la matricola. - Definire una classe
Shapecon un metodoarea()che ritorna 0. Creare classi derivateRettangoloeCerchioche estendonoShapee implementanoarea()calcolando l’area corretta. - Creare una classe
Impiegatocon attributostipendioe un metodocalcolaBonus()che ritorna il 10% dello stipendio. Definire una sottoclasseManagerche estendeImpiegatoe sovrascrivecalcolaBonus()per restituire il 20% dello stipendio. - Realizzare una classe
Librocon attributititoloeautore. Creare una sottoclasseLibroIllustratoche aggiunge un attributonumeroPagineIllustrazioni. Implementare un metododescrizione()che mostri tutte le informazioni. - Definire una classe
Computercon attributorame un costruttore per inizializzarlo. Creare una sottoclasseLaptopche aggiunge un attributopesoe utilizzasuperper richiamare il costruttore della classe base. - Creare una classe
Shape3Dcon un metodovolume()che ritorna 0. Creare una sottoclasseCubocon un attributolatoe implementare il metodovolume()per calcolare il volume. - Realizzare una classe
Personacon un costruttore che inizializza nome e cognome. Creare una sottoclasseDipendenteche chiama il costruttore della superclasse consupere aggiunge un attributoruolo. - Definire una classe
Elettronicocon un metodoaccendi(). Creare due classi derivateTelevisoreeRadioche estendonoElettronicosovrascrivendoaccendi()con messaggi differenti. - Scrivere una classe
Fruttocon attributocoloree metodogetDescrizione(). Creare classiMelaeBananache estendonoFruttoe aggiungono un metodogusto()specifico per ciascun frutto. - Creare una classe
Quadrilaterocon metodi per impostare e ottenere la lunghezza dei lati. Estendere questa classe conQuadratoche imposta automaticamente tutti i lati uguali e aggiunge un metodoperimetro(). - Realizzare una classe
Dipendentecon metodocalcolaPaga(). Creare una sottoclassePartTimeche estendeDipendentee aggiunge attributioreLavorateetariffaOraria, implementandocalcolaPaga()specificamente. - Definire una classe
Personacon metodosaluta(). Creare una sottoclasseAmicoche estendePersonae aggiunge un attributosoprannome. Nelmain, creare un oggettoAmicoe chiamaresaluta(). - Creare una classe
Dispositivocon attributonome. Estendere questa classe conSmartphoneeTablet, aggiungendo un metodotipoDispositivo()che ritorna una descrizione specifica per ogni sottoclasse. - Definire una classe
Veicolocon metodofinal avvia()e verificare che non possa essere sovrascritto. - Creare una classe
Animalecon attributofinal speciee inizializzarlo nel costruttore. - Definire una classe
Personacon attributoprotected nomee creare la sottoclasseStudenteche accede direttamente all’attributo. - Creare una classe
Veicolocon metodoprotected descrizione()e una sottoclasseMotoche lo utilizza. - Realizzare una classe
ContoBancariocon attributoprotected saldoe una sottoclasseContoRisparmioche lo modifica. - Definire una classe astratta
Figuracon metodo astrattoarea()e creare le sottoclassiRettangoloeCerchio. - Creare una classe astratta
Dipendentecon metodo astrattocalcolaStipendio()e le sottoclassiDipendenteFissoeDipendenteOrario. - Definire una classe astratta
Animalecon metodo astrattoverso()e le sottoclassiCaneeGatto. - Creare una classe astratta
Veicolocon metodo astrattoconsumo()e la sottoclasseAuto. - Definire una classe astratta
StrumentoMusicalecon metodo astrattosuona()e creare due sottoclassi.
Polimorfismo
- Definire una classe
Animalecon metodoverso()e creare le sottoclassiCaneeGattoche sovrascrivono il metodo. - Definire una classe
Figuracon metododisegna()e creare le sottoclassiCerchio,RettangoloeTriangolo. Inserire gli oggetti in un array diFigurae chiamaredisegna()per ciascuno. - Creare una classe
Veicolocon metodomuovi()e le sottoclassiBicicletta,AutoeMoto. Usare riferimentiVeicoloper ciascuna sottoclasse. - Definire una classe
Dipendentecon metodocalcolaPaga()e le sottoclassiDipendenteFissoeDipendenteOrarioche lo sovrascrivono. - Definire una classe
StrumentoMusicalecon metodosuona()e le sottoclassiPianoforte,ChitarraeBatteria. Scrivere un metodo che accettaStrumentoMusicalee richiamasuona(). - Creare una classe
ContoBancariocon metodogetDescrizione()e le sottoclassiContoCorrenteeContoDepositoche lo sovrascrivono. - Definire una classe astratta
AnimaleAstrattocon metodo astrattonutriti()e le sottoclassiOrsoeCervoche lo implementano. - Creare una classe astratta
Formacon metodo astrattoarea()e le sottoclassiCerchioeQuadrato. - Definire una classe
Messaggiocon metodostampa()e le sottoclassiMessaggioHTMLeMessaggioPlain. - Creare una classe
Prodottocon metodoprezzoFinale()e le sottoclassiProdottoScontatoeProdottoNormale. - Definire una classe
Forma3Dcon metodovolume()e le sottoclassiCuboeSfera. - Definire una classe
Pagamentocon metodoeffettua()e le sottoclassiPagamentoCarta,PagamentoContantiePagamentoBonifico. Scrivere un metodoprocessaPagamento(Pagamento p). - Creare una classe
Uccellocon metodovola()e le sottoclassiAquilaePinguinoche lo sovrascrivono. - Definire una classe
Loggercon metodolog(String msg)e le sottoclassiConsoleLoggereFileLogger. Inserire gli oggetti in un array diLogger. - Definire una classe astratta
Giocatorecon metodo astrattogioca()e le sottoclassiGiocatoreCalcioeGiocatoreBasket. - Definire un’interfaccia
Volantecon metodovola()e creare le classiAereoeUccelloche la implementano. - Definire un’interfaccia
Stampabilecon metodostampa()e implementarla nelle classiDocumentoeImmagine. - Definire un’interfaccia
Pagabilecon metodopaga()e implementarla nelle classiDipendenteeFornitore. - Definire un’interfaccia
Strumentocon metodosuona()e implementarla nelle classiChitarraePianoforte. Inserire gli oggetti in un array diStrumento. - Definire un’interfaccia
Connettibilecon metodoconnetti()e implementarla nelle classiStampante,MouseeTastiera. - Definire un’interfaccia
VeicoloElettricocon metodoricarica()e implementarla nelle classiAutoElettricaeMonopattinoElettrico. - Definire un’interfaccia
Notificabilecon metodonotifica(String messaggio)e implementarla nelle classiEmaileSMS. - Definire un’interfaccia
Salvabilecon metodosalva()e implementarla nelle classiFileTestoeImmagineDigitale.
Generics
- Definire una classe generica
Contenitore<T>che contenga un singolo oggetto di tipoTcon i metodiset(T x)eget(). - Creare una classe generica
Coppia<T, U>che memorizzi due valori di tipi differenti. - Modificare
Contenitore<T>aggiungendo un metodoswap(Contenitore<T> altro)per scambiare il contenuto. - Definire una classe generica
Scatola<T>con un metododescrizione()che stampi il contenuto. - Creare una classe generica
Tripla<T>che contenga tre elementi dello stesso tipo e stampi i valori. - Definire un metodo generico statico
scambia(T[] array, int i, int j)per scambiare due elementi di un array. - Creare un metodo generico
stampaArray(T[] array)per stampare tutti gli elementi. - Modificare
Contenitore<T>imponendo il vincoloT extends Number. - Creare una classe generica
Cassettiera<T extends Comparable<T>>con metodotrovaMassimo(T a, T b). - Definire una classe generica
LiquidoBox<T extends Liquido>con sottoclassiAcquaeLatte. - Usare il jolly
<?>per dichiarare una variabileContenitore<?>. - Definire un’interfaccia generica
Operazione<T>e implementarla con operazioni matematiche. - Creare una classe generica
ListaSeminata<T>con metodiaggiungi(T x)estampa(). - Definire una classe generica
PairList<T, U>che gestisca coppie di elementi. - Usare
ArrayList<T>per gestire una lista di elementi generici. - Creare una
HashSet<String>e verificare il comportamento sui duplicati. - Creare una
HashSet<Integer>e contare gli elementi distinti. - Creare una
HashMap<String, Integer>per associare nomi ed età. - Usare una
HashMap<String, String>per verificare username e password. - Creare una
HashMap<String, Integer>per gestire i voti degli studenti e stampare solo quelli sufficienti. - Usare una
HashMap<String, Integer>per contare le occorrenze delle parole in una frase. - Creare una
HashSet<String>per memorizzare le materie seguite e verificarne la presenza. - Creare una
HashMap<Integer, String>per simulare una rubrica telefonica.
