// Je n'arrive pas à essayer de faire en sorte que mon programme n'accepte qu'un seul caractère du scanner. À l'heure actuelle, le programme accepte n'importe quel nombre de caractères tant que la première lettre est l'une des lettres répertoriées. Je voudrais réécrire ce code sans le charAt (0) si possible ou ajouter une instruction if. if (sea.length> 1) {} quelque chose comme ça. J'espère avoir suffisamment bien expliqué le problème pour comprendre. Toute aide est appréciée et merci pour votre temps.
public static char promptForChoice(Scanner in) { System.out.println("High, Low or Seven(H/L/S"); char sel = in.next().charAt(0); sel = Character.toUpperCase(sel); int i = 1; while (i != 0) { System.out.println("High, Low or Seven(H/L/S"); if (sel == 'H' || sel == 'L' || sel == 'S') { i = 0; } else { System.out.println("You must enter only H, L or S."); i = 1; } } return sel; }
3 Réponses :
la longueur du caractère est toujours 1, je suppose que vous pouvez réaliser ce dont vous avez besoin avec
public static char promptForChoice(Scanner in) { System.out.println("High, Low or Seven(H/L/S"); char sel = in.next().charAt(0); if(in.next().length == 1) { sel = Character.toUpperCase(sel); int i = 1; while (i != 0) { System.out.println("High, Low or Seven(H/L/S"); if (sel == 'H' || sel == 'L' || sel == 'S') { i = 0; } else { System.out.println("You must enter only H, L or S."); i = 1; } } } else System.out.println("You must enter only one single character"); return sel; }
avec votre code, vous pouvez faire quelque chose comme
public static char promptForChoice(Scanner in) { if(in.next() == "H" || in.next() == "L" || in.next() == "S") { System.out.println("High, Low or Seven(H/L/S"); return (char) in.next(); } else { System.out.println("You must enter only H, L or S."); // you must always have a return value, in this case //e.g. the automatically initialized char value return '\0'; } }
Vous pouvez obtenir l'entrée du scanner et la mettre dans une chaîne, puis vous pouvez faire string.length et la vérifier!
Existe-t-il une commande char.length?
Non, une telle commande n'existe pas. Vous devez obtenir l'entrée en utilisant
Scanner :: nextLine ()
et vérifier la longueur de l'entréeString
.Procédez comme suit: p>
Enter H/L/S [High/Low/Seven]: hello You must enter only H, L or S. Enter H/L/S [High/Low/Seven]: High You must enter only H, L or S. Enter H/L/S [High/Low/Seven]: M You must enter only H, L or S. Enter H/L/S [High/Low/Seven]: H HUn exemple d'exécution:
import java.util.Scanner; public class Main { public static void main(String[] args) { // Test Scanner in = new Scanner(System.in); System.out.println(promptForChoice(in)); } public static char promptForChoice(Scanner in) { char sel = 0; String input; boolean valid; do { valid = true; System.out.print("Enter H/L/S [High/Low/Seven]: "); try { input = in.nextLine(); sel = input.toUpperCase().charAt(0); if (input.length() == 1 && (sel == 'H' || sel == 'L' || sel == 'S')) { return sel; } else { throw new IllegalArgumentException("You must enter only H, L or S."); } } catch (IllegalArgumentException e) { valid = false; System.out.println(e.getMessage()); } } while (!valid); return sel; } }N'hésitez pas à commenter en cas de doute / problème .
Merci beaucoup pour votre aide! Le code était presque parfait, j'ai fait quelques ajustements pour s'adapter au reste de mon code mais vous m'avez vraiment aidé à voir la logique derrière tout cela.