регистр сравнения символов - PullRequest
1 голос
/ 05 ноября 2019

Я работаю над проектом для моего класса Intro to Java, который требует, чтобы я сравнил два символа из двух массивов и проверил, совпадают ли они, игнорируя регистр букв. Он сравнивает ключ ответа правильных ответов с тестовыми ответами студента. Если ответ учащегося не совпадает с ответом ключа ответа, он должен добавить к числу неправильных вопросов.

Это код, который у меня есть:

   public static int gradeExam(char[] correct, char[] student)
   {
      int incorrect = 0;

      for (int i = 0; i < correct.length; i++)
      {
         if (!student[i].equalsIgnoreCase(correct[i]))
         {
            incorrect++;
         }
      }
      return incorrect;
   }

Это массив ключей ответа:

      char[] correct = {'A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B',
                        'C', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D', 'D'};

Когда я пытаюсь скомпилировать, я получаю эту ошибку:

DriverTest.java:53: error: char cannot be dereferenced
         if (!student[i].equalsIgnoreCase(correct[i]))
                        ^
DriverTest.java:68: error: char cannot be dereferenced
         if(!student[i].equalsIgnoreCase(correct[i]))
                       ^
2 errors

Я не уверен, как еще сделать это, игнорируя дело. Я очень новичок в Java, поэтому я прошу прощения, если это очевидное исправление. Пожалуйста, помогите, спасибо!

Ответы [ 6 ]

3 голосов
/ 05 ноября 2019

equalsIgnoreCase - это метод String. Вы не можете применить это на char с.

Вы можете написать

if (!Character.toLowerCase(student[i]) == Character.toLowerCase(correct[i]))

или

if (!Character.toUpperCase(student[i]) == Character.toUpperCase(correct[i]))
1 голос
/ 05 ноября 2019

Поскольку char является примитивным типом, поэтому у него нет метода, аналогичного .methodName(), в противном случае equalsIgnoreCase() принадлежит классу String. Пожалуйста, измените на Character (класс, который обёртывает char)

if (Character.toLowerCase(student[i]) != Character.toLowerCase(correct[i])) {
    incorrect++;
}
1 голос
/ 05 ноября 2019
  1. equalsIgnoreCase () является методом класса String, но student [i] является символом, а не строкой.
  2. Вы можете сравнивать символы с (==,>, <,! =. ..) </li>
  3. Сначала введите char [] student в верхний регистр, а затем сравните.
1 голос
/ 05 ноября 2019

Преобразуйте оба символа в один и тот же регистр и сравните

Character.toLowerCase(student[i]) == Character.toLowerCase(correct[i])

.

1 голос
/ 05 ноября 2019

Пожалуйста, измените оба символа на строчные с Character.toLowerCase(), а затем выполните сравнение.

if (Character.toLowerCase(student[i]) != Character.toLowerCase(correct[i]))
 {
    incorrect++;
 }
0 голосов
/ 05 ноября 2019

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

     if (Character.toLowerCase(student[i])!=(Character.toLowerCase(correct[i])))
     {
        incorrect++;
     }

Класс символов находится в пакете java.lang.

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