Попытка выяснить, как принять только 1 символ из пользовательского ввода - PullRequest
2 голосов
/ 02 апреля 2019

Я не уверен, как проверить, что пользователь вводит только один символ для ввода.Я знаю, что то, что у меня есть для проверки длины, совсем не правильно.Я просто использовал это для наполнителя.Пожалуйста помоги.Я пробовал множество различных способов и искал этот сайт и другие в течение нескольких дней, чтобы найти ответ.

final char SIZE = 10;
char [] letter = new char [SIZE];
// initiallizing input device
Scanner scan = new Scanner(System.in);
for (char index = 0; index < SIZE;)
{
    System.out.println ("Please enter Letter #" + (index + 1));// gets letter from user
    while ((!scan.hasNext("[A-Za-z]+")) || (!scan.hasNext(length(1)))){
        if(!scan.hasNext(length (1))){
            System.out.println ("Please only enter one Letter at a time: ");
            letter [index] = scan.next().charAt(0); // accepts first character entered by user
        }
        if(!scan.hasNext("[A-Za-z]+")){
            System.out.println ("Please enter a valid Letter: ");
            letter [index] = scan.next().charAt(0); // accepts first character entered by user
        }
        else if((scan.hasNext("[A-Za-z]+")) && (scan.next(length(1)))){// makes sure letter entered is a letter
            letter [index] = scan.next().charAt(0); // accepts first character entered by user
            index++;// increases index if proper letter entered
        }
    }
}
for (char index = 0; index < SIZE; index++)
{
    System.out.println ("Letter #" + (index + 1) + ": " + letter [index]);// prints characters entered by user in order
}

Ответы [ 3 ]

0 голосов
/ 02 апреля 2019

Есть много способов сделать это.Одним из способов является то, что АК разместил.Ниже приведен один из способов:

for (char index = 0; index < SIZE;)
{
    String temp = scan.nextLine();

    if (temp.length() != 1)
    {
        // This means their input was too big
    }
    else
    {
        // This means their input was one character
    }

}

Вы также можете использовать scan.next().charAt(0); Эта строка кода будет принимать только один символ из консоли в качестве ввода.

Если у вас есть какие-либо вопросы или этот ответ не тот, который вы ищете, пожалуйста, прокомментируйте ниже, я буду рад помочь.

0 голосов
/ 02 апреля 2019

Входные данные помещаются в буфер только после того, как пользователь нажмет Введите , так что в действительности это всегда по очереди. Вы всегда должны согласовывать свой код с реальностью, поэтому всегда читайте пользовательский ввод в строках .

Этот полезный метод может быть полезен:

private static String read(Scanner scanner, String message, String regex) {
    System.out.println(message);
    String result = "";
    while (true) {
         result = scanner.nextLine();
         if (result.matches(regex)) {
             break;
         }
         System.out.println("Invalid input. " + message);
    }
}

Вы бы назвали это так:

String letter = read(scan, "Please enter Letter #" + (index + 1)", "[A-Za-z]");

Метод read() не вернется, пока не будет введена только одна буква, и вернет эту букву.

0 голосов
/ 02 апреля 2019

Одно решение будет примерно таким:

Scanner sc = new Scanner(System.in);

System.out.println("Enter char");

String in  = sc.next();
while(in.length()!=1){
     System.out.println("Enter only a single char");
     in = sc.next();
}
// Print the read value
System.out.println("Your char is = " + in);

Если вы также хотите проверить, является ли это буква, а не число, просто добавьте проверку в цикле while для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...