Справка по кодированию Java! Не удается получить оператор if для подтверждения строки

#java #if-statement #java.util.scanner

#java #if-statement #java.util.scanner

Вопрос:

Напишите программу, которая запрашивает у пользователя ввод одного символа из алфавита. Выведите гласную или согласную, в зависимости от ввода пользователя. Если пользовательский ввод не является буквой (между a и z или A и Z) или представляет собой строку длиной> 1, выведите сообщение об ошибке.

Я пытался решить эту проблему и в основном все понял, но столкнулся с двумя проблемами. Как мне заставить сканер распознать ошибку, если пользователь вводит число, а не букву. Кроме того, как бы не пришлось повторять их ввод. Есть ли способ заставить первый оператор if оценить, ввел ли пользователь строку?

 import java.util.*;

public class MessAround {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        System.out.println("Please Provide single character from the alphabet: ");
        String letter = scan.next();
        
        if (scan.hasNext())
        {
            letter = letter.toLowerCase();
            if (letter.equals("a") || letter.equals("e") || letter.equals("i") || letter.equals("o") || letter.equals("u"))
            {
                System.out.println("Vowel");
            }
            else if (letter.length() > 1)
            {
                System.out.println("Error");
            }
            else
            {
                System.out.println("Consonant");
            }
        }
        else
        {
            System.out.println("Error");
        }
    }

}
  

Комментарии:

1. Вы можете использовать isDigit() , чтобы увидеть, когда пользователь ввел число вместо символа, я не ответил на второй вопрос

2. Почему вы проверяете «if(scan.hasNext())» У вас уже есть строка из сканера с первого «String letter = scan.next();»

Ответ №1:

Есть много способов решить эту проблему. Некоторые из них следующие:

Использование регулярных выражений:

 import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("Please Provide single character from the alphabet: ");
        String letter = scan.next();

        if (!letter.matches("[A-Za-z]")) {
            System.out.println("Error");
        } else {
            letter = letter.toLowerCase();
            if (letter.matches("[aeiou]")) {
                System.out.println("Vowel");
            } else {
                System.out.println("Consonant");
            }
        }
    }
}
  

Узнайте о регулярных выражениях отсюда.

Используя класс, Character :

 import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        System.out.print("Please Provide single character from the alphabet: ");
        String letter = scan.next();

        if (letter.length() == 1 amp;amp; Character.isAlphabetic(letter.charAt(0))) {
            char ch = Character.toLowerCase(letter.charAt(0));
            if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
                System.out.println("Vowel");
            } else {
                System.out.println("Consonant");
            }
        } else {
            System.out.println("Error");
        }
    }
}
  

Ответ №2:

Добавьте в свой if s: if (isNumber(letter)) { // A number was entered. и создайте isNumber(String) метод, который возвращает true , если строка является числом в том смысле, в каком вы это имеете в виду.

Или лучше сделайте это String isValid(String) методом и реализуйте в методе свои правила проверки. Он может вернуться null , если проверка прошла успешно, в противном случае сообщение.