#java #arrays #string #user-input
#java #массивы #строка #пользовательский ввод
Вопрос:
Я не уверен, как проверить, что пользователь вводит только один символ для ввода. Я знаю, что то, что у меня есть для проверки длины, вообще неверно. Я просто использовал его для заполнения. Пожалуйста, помогите. Я перепробовал множество различных способов и искал этот сайт и другие в течение нескольких дней, чтобы найти ответ.
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] ")) amp;amp; (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
}
Ответ №1:
Есть много способов сделать это. Один из способов — это то, что опубликовал A.K.. Один из способов приведен ниже:
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);
Эта строка кода будет принимать только один символ с консоли в качестве входных данных.
Если у вас есть какие-либо вопросы или этот ответ не то, что вы ищете, пожалуйста, прокомментируйте ниже, я буду рад помочь.
Ответ №2:
Одним из решений было бы что-то вроде этого:
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 для этого.
Ответ №3:
Ввод помещается в буфер только после нажатия пользователем Enter, поэтому в действительности он всегда выполняется по очереди. Вы всегда должны приводить свой код в соответствие с реальностью, поэтому всегда считывайте пользовательский ввод в строках.
Этот служебный метод может использовать полезные:
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()
Метод не будет возвращаться до тех пор, пока не будет введена ровно одна буква, и он вернет эту букву.