// Je suis bloqué en essayant 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 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;


} 
1
TragicFlawz 31 mars 2020 à 04:50

3 réponses

Meilleure réponse

Existe-t-il une commande char.length?

Non, il n'y a pas une telle commande. Vous devez obtenir l'entrée à l'aide de Scanner::nextLine() et vérifier la longueur de l'entrée String.

Procédez comme suit:

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;
    }
}

Un exemple d'exécution:

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
H

N'hésitez pas à commenter en cas de doute / problème.

1
Arvind Kumar Avinash 31 mars 2020 à 02:32

Vous pouvez obtenir l'entrée du scanner et la mettre dans une chaîne, puis vous pouvez faire string.length et le vérifier!

0
a8_ 31 mars 2020 à 02:32

La longueur du caractère est toujours 1, je suppose que vous pourriez obtenir ce dont vous avez besoin avec

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';
}
}

Avec votre code, vous pourriez faire quelque chose comme

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;
    } 
-1
SimonKaroBube 31 mars 2020 à 02:17