Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    toUppercase() che non va...

    Salve, ho realizzato una semplice roulette in Java, giocabile puntando su un numero, oppure sulle opzioni pari/dispari e neri/rossi.
    Funziona perfettamente ma vorrei fare in modo che accetti anche le puntate digitando p, d, n, r anziché le maiuscole indicate nelle istruzioni in println()...

    Dopo aver salvato la scelta dell'utente in
    codice:
    String giocata = input.next();
    faccio questo controllo per vedere come analizzare l'esito...
    codice:
    if (!giocata.toUpperCase().equals("N") && !giocata.toUpperCase().equals("R") && !giocata.toUpperCase().equals("P") && !giocata.toUpperCase().equals("D"))
    ma se digito una minuscola di una lettera prevista il programma termina, senza che il catch visualizzi alcun getMessage() che ho previsto.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Salve, ho realizzato una semplice roulette in Java, giocabile puntando su un numero, oppure sulle opzioni
    codice:
    if (!giocata.toUpperCase().equals("N") && !giocata.toUpperCase().equals("R") && !giocata.toUpperCase().equals("P") && !giocata.toUpperCase().equals("D"))
    Il if che hai scritto è tecnicamente corretto, sebbene hai ripetuto 4 volte il toUpperCase(). Si poteva fare anche più semplicemente:
    codice:
    String giocata = input.next().toUpperCase();
    
    if (!giocata.equals("N") && ...........)

    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    ma se digito una minuscola di una lettera prevista il programma termina, senza che il catch visualizzi alcun getMessage() che ho previsto.
    Ripeto che è tecnicamente corretto quel if, ma dice solo "se non è uno dei caratteri accettati". Se il resto non fa quello che ti aspetti, dipende dal resto della logica. Allora dovresti postare più codice.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Okay, ho risolto mettendo il toUpperCase() direttamente all'input.

    Grazie.

  4. #4
    Ora vorrei intercettare immissioni di caratteri che non corrispondono ad alcuna giocata, poiché se digito E, mi chiede quanto voglio puntare, poi l'if è true e cerca di convertirlo in int per confrontarlo col valore casuale che ottengo dal random() adattato tra 1 e 36.

    Attualmente il programma lancia una NumberFormatException quando trova
    codice:
    int numeroGiocato = Integer.parseInt(giocata);
    ma vorrei che intercettasse la stringa non valida prima di chiedere la puntata...
    Sto pensando a lanciare un metodo che verifichi le immissioni, ma non riesco a comporre un confronto booleano multiplo e "compatto" che qualora sia false provochi
    codice:
    throw NumberFormatException
    Ho visto che c'è matches() di String, ma non so come adattarlo.

    Edit:
    ho provato così
    codice:
    if (!(giocata.equals("N") || giocata.equals("R") || giocata.equals("P") || giocata.equals("D") || giocata.equals("A") || giocata.equals("B") || giocata.equals("C"))) {
        throw new NumberFormatException("Opzione di gioco non valida");
    }
    Ma intercetto anche le String che poi potrei convertire in int.
    Ultima modifica di Gas75; 17-04-2022 a 18:40

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Gas75 Visualizza il messaggio
    Ora vorrei intercettare immissioni di caratteri che non corrispondono ad alcuna giocata, poiché se digito E, mi chiede quanto voglio puntare, poi l'if è true e cerca di convertirlo in int per confrontarlo col valore casuale che ottengo dal random() adattato tra 1 e 36.
    Con Scanner si può benissimo trattare un singolo input come numero o stringa. Se accetti es. "N", "R", "P", "D" o numero, allora:

    Prima testi hasNextInt(), se true estrai il token già come numero con nextInt() (poi chiaramente andrà testato se nel range richiesto). Se false, estrai il token come stringa con next() e testi se N/R/P/D.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Benissimo, risolto!
    Grazie!

    Ora non mi resta che farlo multiplayer.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.