< Home
Stampa

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

  1. Definire una classe Persona con attributi nome e cognome; creare un oggetto di questa classe nel main e stampare i valori degli attributi.
  2. Creare una classe Studente con attributi nome, matricola e voto. Nel main creare due oggetti Studente e stampare i rispettivi attributi.
  3. Aggiungere un costruttore alla classe Studente per inizializzare nome, matricola e voto. Testare la classe creando un oggetto tramite il costruttore.
  4. Creare una classe Libro con attributi titolo e autore, fornendo sia un costruttore completo sia un costruttore vuoto (default). Nel main verificare il funzionamento di entrambe le versioni.
  5. Nella classe Studente aggiungere un metodo stampaInfo() per visualizzare tutte le informazioni dello studente. Utilizzare il metodo nel main.
  6. Aggiungere un metodo aggiornaVoto(int nuovoVoto) per aggiornare il voto di uno studente. Testare il metodo con un oggetto.
  7. Creare un array di 5 oggetti Studente, inizializzarli con valori diversi e stampare le loro informazioni utilizzando un ciclo for.
  8. Creare una classe Studente con costruttore vuoto e attributi privati nome, matricola e voto e relativi getter e setter pubblici. Nel main creare due oggetti Studente e stampare i rispettivi attributi pubblici.
  9. Creare una classe Libro con attributi privati titolo e autore, fornendo un costruttore completo, e solo getter pubblici . Nel main verificare il funzionamento di entrambe le versioni.
  10. Aggiungere alla classe Studente una variabile static int numeroStudenti per 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.
  11. Definire una classe MathUtils con un metodo statico calcolaMedia(int a, int b) che restituisca la media dei due valori. Utilizzare il metodo nel main.
  12. 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.
  13. Creare una classe Corso con attributi nomeCorso e una lista di Studente iscritti. Implementare i metodi aggiungiStudente(Studente s) e stampaStudenti(). Le due classi devono appartenere a due package differenti.
  14. Modificare la classe Studente in modo che contenga anche il riferimento al corso frequentato. Verificare il funzionamento creando istanze di Studente e Corso. Usare sempre package differenti.
  15. Realizzare un semplice sistema di gestione di una biblioteca mediante le classi Libro, Utente e Prestito. Nel main simulare 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. Utente deve avere un package diverso da Libro e Prestito.
  16. Modificare l’esercizio precedente: aggiungere a Libro un attributo statico privato contatore, che viene incrementato ogni volta che viene creato un libro. E’ presente poi un attributo privato non statico id, 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, ma id differente.

Classi libreria Java

  1. Creare un programma che mostri il testo “Java Library Demo” usando System.out.println().
  2. Utilizzare la classe String per concatenare due stringhe e stampare il risultato (es. nome e cognome).
  3. Creare una stringa e stampare la lunghezza della stessa usando un metodo della classe String.
  4. Utilizzare il metodo toUpperCase() di String per convertire una frase in maiuscolo e visualizzarla.
  5. Usare Math.abs() per calcolare il valore assoluto di un numero negativo e stamparlo.
  6. Usare Math.max() e Math.min() per trovare e stampare il massimo e il minimo tra due numeri.
  7. Calcolare la potenza di un numero usando Math.pow() e stampare il risultato.
  8. Generare un numero casuale tra 0 e 100 utilizzando Math.random() e stamparlo.
  9. Importare la classe Scanner, leggere un intero da console e visualizzare il numero inserito.
  10. Utilizzare Scanner per leggere due numeri interi e stampare la loro somma.
  11. Usare Scanner per leggere una riga di testo e poi visualizzarla con un messaggio personalizzato.
  12. Leggere da tastiera due numeri reali (double) con Scanner e stampare il risultato della loro moltiplicazione.
  13. Creare una stringa tramite String e usare charAt() per estrarre e stampare il primo carattere.
  14. Dato un numero double, usare Math.round() per arrotondarlo all’intero più vicino e stampare il risultato.
  15. Leggere un intero positivo con Scanner e stampare tutti i numeri da 1 a quel valore usando un ciclo (ad es. for)
  16. Creare un programma che provi a leggere il contenuto di un file di testo chiamato input.txt e lo stampi a schermo. Gestire l’eventuale errore di file non trovato usando try e catch.
  17. Scrivere un programma che chieda all’utente una frase e la salvi in un file output.txt. Gestire eventuali errori di scrittura mediante try–catch.
  18. Creare un programma che legga un numero intero da un file numero.txt e ne stampi il doppio. Gestire le possibili eccezioni dovute all’assenza del file o al formato non valido del contenuto.
  19. Scrivere un programma che copi il contenuto del file origine.txt nel file destinazione.txt, gestendo tutte le possibili eccezioni con try–catch.
  20. Creare un programma che legga tutte le righe di un file nomi.txt e conti quante righe sono presenti nel file. Gestire eventuali errori di apertura del file con try–catch.

Ereditarietà

  1. Definire una classe Animale con un metodo emettiSuono() che stampa un messaggio generico. Creare una sottoclasse Cane che estende Animale e che sovrascrive emettiSuono() stampando un verso specifico.
  2. Creare una classe Veicolo con attributo velocita e un metodo stampaVelocita(). Definire una classe Auto che estende Veicolo aggiungendo un attributo marca. Testare la creazione di un oggetto Auto e la stampa dei suoi valori.
  3. Realizzare una classe Persona con attributi nome e cognome e un metodo datiPersona(). Creare una sottoclasse Studente che aggiunge un attributo matricola e sovrascrive datiPersona() per includere anche la matricola.
  4. Definire una classe Shape con un metodo area() che ritorna 0. Creare classi derivate Rettangolo e Cerchio che estendono Shape e implementano area() calcolando l’area corretta.
  5. Creare una classe Impiegato con attributo stipendio e un metodo calcolaBonus() che ritorna il 10% dello stipendio. Definire una sottoclasse Manager che estende Impiegato e sovrascrive calcolaBonus() per restituire il 20% dello stipendio.
  6. Realizzare una classe Libro con attributi titolo e autore. Creare una sottoclasse LibroIllustrato che aggiunge un attributo numeroPagineIllustrazioni. Implementare un metodo descrizione() che mostri tutte le informazioni.
  7. Definire una classe Computer con attributo ram e un costruttore per inizializzarlo. Creare una sottoclasse Laptop che aggiunge un attributo peso e utilizza super per richiamare il costruttore della classe base.
  8. Creare una classe Shape3D con un metodo volume() che ritorna 0. Creare una sottoclasse Cubo con un attributo lato e implementare il metodo volume() per calcolare il volume.
  9. Realizzare una classe Persona con un costruttore che inizializza nome e cognome. Creare una sottoclasse Dipendente che chiama il costruttore della superclasse con super e aggiunge un attributo ruolo.
  10. Definire una classe Elettronico con un metodo accendi(). Creare due classi derivate Televisore e Radio che estendono Elettronico sovrascrivendo accendi() con messaggi differenti.
  11. Scrivere una classe Frutto con attributo colore e metodo getDescrizione(). Creare classi Mela e Banana che estendono Frutto e aggiungono un metodo gusto() specifico per ciascun frutto.
  12. Creare una classe Quadrilatero con metodi per impostare e ottenere la lunghezza dei lati. Estendere questa classe con Quadrato che imposta automaticamente tutti i lati uguali e aggiunge un metodo perimetro().
  13. Realizzare una classe Dipendente con metodo calcolaPaga(). Creare una sottoclasse PartTime che estende Dipendente e aggiunge attributi oreLavorate e tariffaOraria, implementando calcolaPaga() specificamente.
  14. Definire una classe Persona con metodo saluta(). Creare una sottoclasse Amico che estende Persona e aggiunge un attributo soprannome. Nel main, creare un oggetto Amico e chiamare saluta().
  15. Creare una classe Dispositivo con attributo nome. Estendere questa classe con Smartphone e Tablet, aggiungendo un metodo tipoDispositivo() che ritorna una descrizione specifica per ogni sottoclasse.
  16. Definire una classe Veicolo con metodo final avvia() e verificare che non possa essere sovrascritto.
  17. Creare una classe Animale con attributo final specie e inizializzarlo nel costruttore.
  18. Definire una classe Persona con attributo protected nome e creare la sottoclasse Studente che accede direttamente all’attributo.
  19. Creare una classe Veicolo con metodo protected descrizione() e una sottoclasse Moto che lo utilizza.
  20. Realizzare una classe ContoBancario con attributo protected saldo e una sottoclasse ContoRisparmio che lo modifica.
  21. Definire una classe astratta Figura con metodo astratto area() e creare le sottoclassi Rettangolo e Cerchio.
  22. Creare una classe astratta Dipendente con metodo astratto calcolaStipendio() e le sottoclassi DipendenteFisso e DipendenteOrario.
  23. Definire una classe astratta Animale con metodo astratto verso() e le sottoclassi Cane e Gatto.
  24. Creare una classe astratta Veicolo con metodo astratto consumo() e la sottoclasse Auto.
  25. Definire una classe astratta StrumentoMusicale con metodo astratto suona() e creare due sottoclassi.

Polimorfismo

  1. Definire una classe Animale con metodo verso() e creare le sottoclassi Cane e Gatto che sovrascrivono il metodo.
  2. Definire una classe Figura con metodo disegna() e creare le sottoclassi Cerchio, Rettangolo e Triangolo. Inserire gli oggetti in un array di Figura e chiamare disegna() per ciascuno.
  3. Creare una classe Veicolo con metodo muovi() e le sottoclassi Bicicletta, Auto e Moto. Usare riferimenti Veicolo per ciascuna sottoclasse.
  4. Definire una classe Dipendente con metodo calcolaPaga() e le sottoclassi DipendenteFisso e DipendenteOrario che lo sovrascrivono.
  5. Definire una classe StrumentoMusicale con metodo suona() e le sottoclassi Pianoforte, Chitarra e Batteria. Scrivere un metodo che accetta StrumentoMusicale e richiama suona().
  6. Creare una classe ContoBancario con metodo getDescrizione() e le sottoclassi ContoCorrente e ContoDeposito che lo sovrascrivono.
  7. Definire una classe astratta AnimaleAstratto con metodo astratto nutriti() e le sottoclassi Orso e Cervo che lo implementano.
  8. Creare una classe astratta Forma con metodo astratto area() e le sottoclassi Cerchio e Quadrato.
  9. Definire una classe Messaggio con metodo stampa() e le sottoclassi MessaggioHTML e MessaggioPlain.
  10. Creare una classe Prodotto con metodo prezzoFinale() e le sottoclassi ProdottoScontato e ProdottoNormale.
  11. Definire una classe Forma3D con metodo volume() e le sottoclassi Cubo e Sfera.
  12. Definire una classe Pagamento con metodo effettua() e le sottoclassi PagamentoCarta, PagamentoContanti e PagamentoBonifico. Scrivere un metodo processaPagamento(Pagamento p).
  13. Creare una classe Uccello con metodo vola() e le sottoclassi Aquila e Pinguino che lo sovrascrivono.
  14. Definire una classe Logger con metodo log(String msg) e le sottoclassi ConsoleLogger e FileLogger. Inserire gli oggetti in un array di Logger.
  15. Definire una classe astratta Giocatore con metodo astratto gioca() e le sottoclassi GiocatoreCalcio e GiocatoreBasket.
  16. Definire un’interfaccia Volante con metodo vola() e creare le classi Aereo e Uccello che la implementano.
  17. Definire un’interfaccia Stampabile con metodo stampa() e implementarla nelle classi Documento e Immagine.
  18. Definire un’interfaccia Pagabile con metodo paga() e implementarla nelle classi Dipendente e Fornitore.
  19. Definire un’interfaccia Strumento con metodo suona() e implementarla nelle classi Chitarra e Pianoforte. Inserire gli oggetti in un array di Strumento.
  20. Definire un’interfaccia Connettibile con metodo connetti() e implementarla nelle classi Stampante, Mouse e Tastiera.
  21. Definire un’interfaccia VeicoloElettrico con metodo ricarica() e implementarla nelle classi AutoElettrica e MonopattinoElettrico.
  22. Definire un’interfaccia Notificabile con metodo notifica(String messaggio) e implementarla nelle classi Email e SMS.
  23. Definire un’interfaccia Salvabile con metodo salva() e implementarla nelle classi FileTesto e ImmagineDigitale.

Generics

  1. Definire una classe generica Contenitore<T> che contenga un singolo oggetto di tipo T con i metodi set(T x) e get().
  2. Creare una classe generica Coppia<T, U> che memorizzi due valori di tipi differenti.
  3. Modificare Contenitore<T> aggiungendo un metodo swap(Contenitore<T> altro) per scambiare il contenuto.
  4. Definire una classe generica Scatola<T> con un metodo descrizione() che stampi il contenuto.
  5. Creare una classe generica Tripla<T> che contenga tre elementi dello stesso tipo e stampi i valori.
  6. Definire un metodo generico statico scambia(T[] array, int i, int j) per scambiare due elementi di un array.
  7. Creare un metodo generico stampaArray(T[] array) per stampare tutti gli elementi.
  8. Modificare Contenitore<T> imponendo il vincolo T extends Number.
  9. Creare una classe generica Cassettiera<T extends Comparable<T>> con metodo trovaMassimo(T a, T b).
  10. Definire una classe generica LiquidoBox<T extends Liquido> con sottoclassi Acqua e Latte.
  11. Usare il jolly <?> per dichiarare una variabile Contenitore<?>.
  12. Definire un’interfaccia generica Operazione<T> e implementarla con operazioni matematiche.
  13. Creare una classe generica ListaSeminata<T> con metodi aggiungi(T x) e stampa().
  14. Definire una classe generica PairList<T, U> che gestisca coppie di elementi.
  15. Usare ArrayList<T> per gestire una lista di elementi generici.
  16. Creare una HashSet<String> e verificare il comportamento sui duplicati.
  17. Creare una HashSet<Integer> e contare gli elementi distinti.
  18. Creare una HashMap<String, Integer> per associare nomi ed età.
  19. Usare una HashMap<String, String> per verificare username e password.
  20. Creare una HashMap<String, Integer> per gestire i voti degli studenti e stampare solo quelli sufficienti.
  21. Usare una HashMap<String, Integer> per contare le occorrenze delle parole in una frase.
  22. Creare una HashSet<String> per memorizzare le materie seguite e verificarne la presenza.
  23. Creare una HashMap<Integer, String> per simulare una rubrica telefonica.