Verifica se una frase è palindroma in Java

[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 (posizione lunghezza - 1)

Il ciclo while confronta i caratteri:

  • Se i caratteri nelle posizioni inizio e fine sono diversi, la frase NON è palindroma
  • Altrimenti, sposta inizio avanti di una posizione e fine indietro 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":

  1. Originale: "I topi non avevano nipoti"
  2. Minuscolo: "i topi non avevano nipoti"
  3. Senza spazi: "itopinonavevaniipoti"
  4. 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();
    }
}