#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
, если проверка прошла успешно, в противном случае сообщение.