Ho un menù che cicla all'infinito finché l'utente non digita un carattere per uscire dal programma.
Il problema è che una volta selezionata un'opzione da tale menù, e una volta terminata l'operazione corrispondente, il menù ricompare ma è come se accettasse automaticamente il carattere di invio senza dare la possibilità all'utente di digitare un nuovo carattere.
Dato che appunto viene inviato implicitamente un comando non valido, ricompare nuovamente il menù che stavolta attende l'input, come effettivamente dovrebbe funzionare.

codice:
    public static void menu()
    {
        char input;
        boolean done = false;
        
        while (!done)
        {
            System.out.println();
            System.out.println("SELEZIONARE UN COMANDO\n");
            System.out.println("  A = Stampa i titoli principali di entrambi i quotidiani");
            System.out.println("  B = Elenca tutti i titoli di un quotidiano");
            System.out.println("  C = Confronta due notizie");
            System.out.println("  E = Esci dall'applicazione\n");

            try
            {
                input = (char)System.in.read();

                int c = (int)input;        /* ho aggiunto queste due istruzioni */
                System.out.println(c);     /* per verificare il carattere selezionato */
                
                switch (input)
                {
                    case 'A':
                    case 'a':
                        comando1();
                        break;
                    case 'B':
                    case 'b':
                        comando2();
                        break;
                    case 'C':
                    case 'c':
                        comando3();
                        break;
                    case 'E':
                    case 'e':
                        done = true;
                        break;
                    default:
                        System.out.println("valore non corretto\n\n");
                }
            }
            catch (IOException e)
            {
                //gestisco l'eccezione
            }
        }
    }
L'output è il seguente:

codice:
SELEZIONARE UN COMANDO

  A = Stampa i titoli principali di entrambi i quotidiani
  B = Elenca tutti i titoli di un quotidiano
  C = Confronta due notizie
  E = Esci dall'applicazione

a
97

/* stampa dei titoli */


SELEZIONARE UN COMANDO

  A = Stampa i titoli principali di entrambi i quotidiani
  B = Elenca tutti i titoli di un quotidiano
  C = Confronta due notizie
  E = Esci dall'applicazione

10                            /* da qui deduco che il programma prende automaticamente l'invio */
valore non corretto           /* (che tuttavia non è stato digitato se non al passo precedente) */



SELEZIONARE UN COMANDO

  A = Stampa i titoli principali di entrambi i quotidiani
  B = Elenca tutti i titoli di un quotidiano
  C = Confronta due notizie
  E = Esci dall'applicazione

e
101
Come faccio ad evitare quel passo intermedio in cui prende l'invio senza che io l'abbia digitato?
Ho provato anche con un oggetto Scanner, ma non ho risolto.

Grazie in anticipo per l'eventuale illuminazione.