PROBLEMA Condizione composta if in Java non funziona

Pubblicità

Andygara23

Nuovo Utente
Messaggi
31
Reazioni
0
Punteggio
29
Buongiorno a tutti
Ho un problema con delle condizioni composte in un if in Java
Allego il pezzo di codice incriminato:
Java:
char sesso;
                do {
                    System.out.print("Inserire sesso (M/F/A): ");
                    sesso = in.leggiStringa().charAt(0); //prendo solo primo carattere della stringa
                    if ((sesso != 'm') || (sesso != 'f') || (sesso != 'M') || (sesso != 'F') || (sesso != 'a') || (sesso != 'A')){
                        System.out.println("Errore, dato non corretto. Reinserire il dato");
                    }
                } while ((sesso != 'm') || (sesso != 'f') || (sesso != 'M') || (sesso != 'F') || (sesso != 'a') || (sesso != 'A'));
Se inserisco un qualsiasi carattere da tastiera mi rifà il ciclo do-while
Come posso risolvere?
Grazie mille
 
Ultima modifica da un moderatore:
Buonasera a te!

Aiutaci ad aiutarti: cosi' il CODICE risulta praticamente illegibile... per questo esiste e bisogna usare il tag CODE.
Qui viene spiegato come usarlo.
 
Ultima modifica:
Buongiorno a tutti
Ho un problema con delle condizioni composte in un if in Java
Allego il pezzo di codice incriminato:

char sesso;
do {
System.out.print("Inserire sesso (M/F/A): ");
sesso = in.leggiStringa().charAt(0); //prendo solo primo carattere della stringa
if ((sesso != 'm') || (sesso != 'f') || (sesso != 'M') || (sesso != 'F') || (sesso != 'a') || (sesso != 'A')){
System.out.println("Errore, dato non corretto. Reinserire il dato");
}
} while ((sesso != 'm') || (sesso != 'f') || (sesso != 'M') || (sesso != 'F') || (sesso != 'a') || (sesso != 'A'));

Se inserisco un qualsiasi carattere da tastiera mi rifà il ciclo do-while
Come posso risolvere?
Grazie mille

Immagino intendi che ti fa il ciclo anche se inserisci i caratteri m, f, ecc.

Il problema è che le tue condizioni sono in OR (||), operatore logico che al contrario dell'AND (&&) rende vero il tutto quando anche solo una delle parti è vera.
Per cui quando inserisci per dire 'm', sesso non è diverso da m, ma è diverso da f e il tutto è vero.

Dovresti controllare l'uguaglianza con ==, metterli in OR e verificare quando non è vero

Es.

while (! ((sesso == 'm') || (sesso == 'f') || (sesso == 'M') || (sesso == 'F') || (sesso == 'a') || (sesso == 'A')));

Come puoi vedere ho messo il NOT davanti a tutto all'inizio, che è come dire, "se il carattere non è uguale a uno di quelli, rifai il ciclo".

Edit: effettivamente ci ho girato in torno lol, basta cambiare l'OR in AND come detto da personalele, che è come dire controllare quando il carattere è diverso da tutti quelli elencati.
 
Puoi inoltre smezzare i confronti passando sesso.toUpperCase() oppure creare una stringa con tutti i valori ammissibili ("mMfFaA") e poi verificare se il carattere del sesso è presente al suo interno con string.indexOf(sesso) che ritorna la posizione del carattere nella stringa (partendo da 0) o -1 se non lo trova.
Poi vabbè, non serve ripetere la roba dell'if anche nel while, gli fai fare loop "infinito" indicando while (true) e con l'else dell'if cioè hai la lettera giusta esci dal loop con un break;
 
Ultima modifica:
Nello svolgimento del compito per casa si potrebbe aggiungere un tocco personale usando toLowerCase() oppure toUpperCase() risparmiando così un paio di controlli in meno nell' if.
 
Pubblicità
Pubblicità
Indietro
Top