[SOL] Java - Esercizio nr. 98
Verifica se una Frase è Palindroma
Cos'è un palindromo?
Un palindromo è una parola o frase che si legge allo stesso modo sia da sinistra verso destra che da destra verso sinistra. Esempi famosi sono "anna", "osso" o frasi come "I topi non avevano nipoti".
Come funziona il programma
Questo programma Java verifica se una frase inserita dall'utente è palindroma, ignorando gli spazi e le differenze tra maiuscole e minuscole.
Codice completo:
import java.util.Scanner;
/*
* Esercizio: leggere una frase e dire se è palindroma,
* ignorando gli spazi e la differenza tra maiuscole e minuscole.
*
* Esempio: "I topi non avevano nipoti" -> palindroma
*/
public class Palindroma {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 1. Leggo la frase
System.out.print("Inserisci una frase: ");
String frase = input.nextLine();
// 2. Trasformo tutto in minuscolo
String pulita = frase.toLowerCase();
// 3. Tolgo gli spazi
pulita = pulita.replace(" ", "");
// 4. Confronto i caratteri: il primo con l'ultimo,
// il secondo con il penultimo, e così via
boolean palindroma = true;
int inizio = 0;
int fine = pulita.length() - 1;
while (inizio < fine) {
if (pulita.charAt(inizio) != pulita.charAt(fine)) {
palindroma = false;
}
inizio++;
fine--;
}
// 5. Stampo il risultato
if (palindroma) {
System.out.println("La frase è palindroma.");
} else {
System.out.println("La frase NON è palindroma.");
}
input.close();
}
}
Spiegazione passo per passo
1. Lettura della frase
Il programma chiede all'utente di inserire una frase e la memorizza nella variabile frase.
2. Preparazione della stringa
Per verificare correttamente se la frase è palindroma, il programma deve:
- Convertire tutto in minuscolo:
frase.toLowerCase()trasforma tutte le lettere maiuscole in minuscole - Rimuovere gli spazi:
replace(" ", "")elimina tutti gli spazi dalla stringa
3. Algoritmo di verifica
Il programma usa la tecnica dei due puntatori:
inizio: parte dal primo carattere (posizione 0)fine: parte dall'ultimo carattere (posizionelunghezza - 1)
Il ciclo while confronta i caratteri:
- Se i caratteri nelle posizioni
inizioefinesono diversi, la frase NON è palindroma - Altrimenti, sposta
inizioavanti di una posizione efineindietro di una posizione - Continua finché i due puntatori non si incontrano
4. Risultato
Alla fine, se la variabile palindroma è ancora true, significa che tutti i confronti sono andati a buon fine e la frase è palindroma.
Esempio pratico
Con la frase "I topi non avevano nipoti":
- Originale: "I topi non avevano nipoti"
- Minuscolo: "i topi non avevano nipoti"
- Senza spazi: "itopinonavevaniipoti"
- Verifica:
- i ↔ i ✓
- t ↔ t ✓
- o ↔ o ✓
- p ↔ p ✓
- ... e così via
Risultato: È palindroma!
Concetti chiave utilizzati
- Scanner per l'input dell'utente
- Metodi delle stringhe:
toLowerCase(),replace(),charAt(),length() - Ciclo while per l'iterazione
- Variabili boolean per memorizzare il risultato
- Algoritmo dei due puntatori per l'efficienza
import java.util.Scanner;
/*
* Esercizio: leggere una frase e dire se è palindroma,
* ignorando gli spazi e la differenza tra maiuscole e minuscole.
*
* Esempio: "I topi non avevano nipoti" -> palindroma
*/
public class Palindroma {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
// 1. Leggo la frase
System.out.print("Inserisci una frase: ");
String frase = input.nextLine();
// 2. Trasformo tutto in minuscolo
String pulita = frase.toLowerCase();
// 3. Tolgo gli spazi
pulita = pulita.replace(" ", "");
// 4. Confronto i caratteri: il primo con l'ultimo,
// il secondo con il penultimo, e così via
boolean palindroma = true;
int inizio = 0;
int fine = pulita.length() - 1;
while (inizio < fine) {
if (pulita.charAt(inizio) != pulita.charAt(fine)) {
palindroma = false;
}
inizio++;
fine--;
}
// 5. Stampo il risultato
if (palindroma) {
System.out.println("La frase è palindroma.");
} else {
System.out.println("La frase NON è palindroma.");
}
input.close();
}
}