# Java/Esercizi

Java
Copertina Tutti i moduli · Sviluppo
    CopertinaJava/Copertina
* Guida alla programmazione
** IntroduzioneJava/Introduzione
** Procurarsi il JDKJava/Procurarsi il JDK
** Dal sorgente all'esecuzioneJava/Dal sorgente all'esecuzione
** Il linguaggioJava/Il linguaggio
** Programmazione ad oggettiJava/Programmazione ad oggetti
** JavadocJava/Javadoc
** EserciziJava/Esercizi
** La macchina virtualeJava/La macchina virtuale
** Errori e mitiJava/Errori e miti
** Trucchi e consigliJava/Trucchi e consigli
* Specifica di linguaggio
** Tipi di datoJava/Tipi di dato
** Concetti fondamentaliJava/Concetti fondamentali
** OperatoriJava/Operatori
** Variabili localiJava/Variabili locali
** IstruzioniJava/Istruzioni
** Strutture di controlloJava/Strutture di controllo
** PackageJava/Package
** Classi e oggettiJava/Classi e oggetti
** OggettiJava/Oggetti
** MetodiJava/Metodi
** metodi (seconda parte)Java/Metodi/2
** ArrayJava/Array
** Modificatori di accessoJava/Modificatori di accesso
** EreditarietàJava/Ereditarietà
** Gestione delle eccezioniJava/Gestione delle eccezioni
** GenericsJava/Generics
** LessicoJava/Lessico
** GrammaticaJava/Grammatica
* Libreria standard
** Comunicazione serialeJava/Comunicazione seriale
** Stream
** Input e outputJava/Input e output
** Collections
** AWT e SwingJava/AWT e Swing
** Reflection
** SerializzazioneJava/Serializzazione
** SocketJava/Socket
* Argomenti avanzati
** MultithreadingJava/Multithreading
** Interblocco ricontrollatoJava/Interblocco ricontrollato
Modifica il sommario
Segue un elenco di esercizi. Le soluzioni possono essere discusse online su Wikiversità, alla pagina Java/Esercizi.

## Facile

Esercizi per impratichirsi su una alla volta delle strutture di base del linguaggio.
* Data una stringa, formarne una nuova con i caratteri successivi di quella di partenza, usando un ciclo for. Esempio: "testo" ====> "uftup".
** Variante che ignora gli spazi e i segni di punteggiatura.
* Data una stringa, convertire le lettere maiuscole in minuscole e viceversa, usando un ciclo for.
* Implementa i seguenti programmi Unix: grep, cat

## Medio

Esercizi che richiedono l'uso combinato di più strutture del linguaggio.
Un numero viene chiamato numero primo se è diverso da 1 ed è divisibile solo per 1 e per se stesso. I numeri primi sono 2, 3, 5, 7, 11, 13, 17, 19, ... Quindi, il primo numero primo è 2, il quarto è 7, il settimo è 17; verificalo con un programma che contiene questi metodi:
* boolean isPrimo(int i), determina se un numero è primo, andando per tentativi (lo divide per tutti i numeri inferiori; suggerimento: l'importante è il resto della divisione, usa l'operatore modulo %)
* int nsimoNumeroPrimo(int n), calcola l'n-simo numero primo
* void main(String args)
Qual è il più grande numero primo che nsimoNumeroPrimo può restituire? (Suggerimento) Qual è il successivo numero primo? (Suggerimento: BigInteger)

## Progetti
### Editor di testo

* Scrivi una classe EditorFrame che estende JFrame e che rappresenta l'interfaccia grafica di un editor di testo semplice, analogamente al Blocco Note di Windows e al TextEdit del Mac. Metti almeno i pulsanti tipici: per caricare e salvare un file, impostare il tipo di carattere, uscire dal programma, ecc. Scrivi il codice a mano, non generarlo con un editor.
* Scrivi una classe LogicaOperativa, che contiene un metodo per ogni operazione della logica che non appartiene all'interfaccia. Per es. i metodi caricaDaFile, salvaSuFile, terminaProgramma. Implementa questi i metodi.
* Aggiungi gli event listener al frame, richiamando i metodi di questa classe su un oggetto che viene passato nel costruttore.
Suggerimenti:
* la funzionalità di impostare il tipo di carattere può essere implementata direttamente nel frame, non nella classe LogicaOperativa.