Не должен ли input.charAt (0) возвращать строку? Почему input.charAt(0) >= int работает?

#java #uppercase #lowercase #charat

#java #верхний регистр #нижний регистр #charat

Вопрос:

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

 import java.util.Scanner;
public class Exercise8 {


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

        System.out.print("Input a alphabet: ");
        String input = in.next().toLowerCase();

        boolean uppercase = input.charAt(0) >= 65 amp;amp; input.charAt(0) <= 90;
        boolean lowercase = input.charAt(0) >= 97 amp;amp; input.charAt(0) <= 122;
        boolean vowels = input.equals("a") || input.equals("e") || input.equals("i")
                || input.equals("o") || input.equals("u");

        if (input.length() > 1)
        {
            System.out.println("Error. Not a single character.");
        }
        else if (!(uppercase || lowercase))
        {
            System.out.println("Error. Not a letter. Enter uppercase or lowercase letter.");
        }
        else if (vowels)
        {
            System.out.println("Input letter is Vowel");
        }
        else
        {`enter code here`
            System.out.println("Input letter is Consonant");
        }
    }
}
  

Как это происходит,

 boolean uppercase = input.charAt(0) >= 65 amp;amp; input.charAt(0) <= 90;
  

работает? Не должен input.charAt() возвращать строку?

Кроме того, почему существует различие для верхнего и нижнего регистра во второй половине кода, если кто-то использовал

 toLowerCase();
  

уже?

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

1.Почему должен charAt возвращать строку?

2. прочитайте об acsii и char

3. charAt() возвращает char , что, на мой взгляд, имеет смысл.

4. Почему бы вам не проконсультироваться с javadoc? docs.oracle.com/javase/8/docs/api/java/lang /…

5. да, проверка верхнего регистра не имеет смысла, поскольку он уже преобразован в нижний регистр раньше

Ответ №1:

Похоже, у вас есть и вопрос, и ответ. И вам нужно знать, как работает charAt (0), во-первых, во-вторых, вы хотите знать, как на самом деле работает код.. Если вам интересно, почему ваш вопрос отклоняется, то это ответ.

SE не является сайтом для проверки кода. Если у вас есть какие-либо конкретные сомнения в отношении рабочего процесса кода, то, безусловно, это ваше место. Даже я столкнулся с подобной ситуацией, когда впервые начал использовать SE. Не беспокойтесь о недостатках, вы станете профессионалом в задавании вопросов с опытом.

Теперь отвечаю на ваш вопрос:

Метод java string charAt() возвращает значение char с заданным номером индекса. Номер индекса начинается с 0.

Пример:

 public class Solution{  
public static void main(String args[]){  
String name="StackExchange";  
char ch=name.charAt(4);//returns the char value at the 4th index  
System.out.println(ch);  
}}  
  

Результат равен k ..

Кроме того, почему существует различие для верхнего и нижнего регистра во второй половине кода, если кто-то использовал

toLowerCase();

Это именно тот способ, от использования которого вам следует воздержаться в SE..

Это явно говорит нам, что это не ваш код, и вы хотите, чтобы люди здесь научили вас логике кода.

В любом случае ответ на этот ваш вопрос таков,

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

Несколько идей:

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

Всего наилучшего.

Ответ №2:

Не должен ли input.charAt (0) возвращать строку?

Нет.

Он возвращает char . Проверьте javadoc.

Почему input.charAt(0) >= int работает?

Потому что charAt(0) возвращает a char , и a char можно сравнить (безопасно!) с int .


Сказав это, ваш код работает должным образом, только если входной символ состоит из символов в (7-битном) ASCII. Это не будет работать для латинских символов с ударением, для греческого, кириллического, арабского или …. практически для всего остального. (Хорошо, вы, вероятно, столкнулись только с проблемой работы с текстом ASCII. Но имейте это в виду в будущих задачах программирования, которые вы выполняете.)

И в вашем коде есть другие ошибки, как указано в комментариях.