PROBLEMA Condizione composta if in Java non funziona

Andygara23

Nuovo Utente
31
0
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:

BrutPitt

Utente Attivo
1,166
1,262
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:

GraveKeeper

Utente Èlite
7,023
3,185
CPU
AMD Ryzen 7 3700X
Dissipatore
Enermax LiqMax III ARGB 240 Nero ARGB
Scheda Madre
Asus Tuf Gaming B550-PLUS (WIFI)
HDD
Samsung 970 EVO Plus 500GB NVMe + Crucial MX500 1TB + 2 x WD10EZEX Blue 1TB
RAM
Adata XPG Spectrix 16gb (2x8) 3200Mhz RGB
GPU
Asus NVIDIA GeForce GTX 750ti OC 2GB (in attesa di meglio)
Audio
Behringer U-PHORIA UM2 (chissà, magari un giorno prenderò una Scarlett Solo)
Monitor
LG 27GN800 UltraGear QHD IPS 27" 1ms 144Hz
PSU
ITEK GF 750W 80Gold
Case
NZXT H510i Nero
Periferiche
Studio Monitor Speakers Presonus Eris E3.5, Audio Technica ATH-M30x
OS
Windows 10 Home 64-bit
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.
 

Dumah Brazorf

Utente cAttivo
Utente Èlite
7,586
3,532
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:

« MoMy »

Utente Èlite
1,527
768
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.
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili