Intereting Posts
Клавиатура с клавиатурой, перекрывающей клавиатуру Android, просмотр не прокручивается автоматически Динамическое создание кнопок и установка onClickListener Какая польза от «прикрепления к корню» в развороте макета? Рассчитать частоту сердечных сокращений от потока ЭКГ – java / Nymi Band Как читать исходные значения аудиоформата 3gp / AMR-NB? Ошибка версии Code / versionName Mac Ошибка Создать проект Android – «Ошибки запускают« Менеджер ресурсов Android »в проекте" E / SpannableStringBuilder (18909): SPAN_EXCLUSIVE_EXCLUSIVE промежутки не могут иметь нулевую длину Темы для Android – как установить стиль только для определенных типов просмотра Прокрутите до заданной позиции в Android Leanback ListRow Не удалось снять скриншот на андроиде с использованием роботизма и частного метода Android: используйте инструкцию SWITCH с помощью setOnClickListener / onClick для более чем 1 кнопки? Как определить мою позицию больше не отображается на карте (после навигации)? Android – значок уведомления о появлении строки состояния Ошибка после того, как Fingerprint коснулся телефонов Samsung: android.security.KeyStoreException: ключевой пользователь не аутентифицирован

Строковые массивы не совпадают

Моя программа отображает множество вопросов (вопрос один за другим). После того как я напишу ответ, предупреждающее сообщение должно сообщить мне, правильно ли я прав. Проблема в том, что даже если я напишу правильный ответ, в предупреждающем сообщении появится сообщение «false».

final String questions[] = {"Who's Tom?", "Who's Luca?", "Who's Flavie?"} final String answers[] = {"American", "Italian", "French"} // display question answer_question.setOnClickListener(new View.OnClickListener() { int CurrentQuestionIndex = 0; public void onClick(View v) { ask_question.setText(question[(CurrentQuestionIndex++) % (questions.length)]); // discuss question versus answer EditText answer = (EditText) findViewById(R.id.tvReponseF); if (answer.equals(answers[CurrentQuestionIndex])) { alertMessageRight(); } else { alertMessageFalse(); } } }); 

Solutions Collecting From Web of "Строковые массивы не совпадают"

Проблема в том, что вы сравниваете объект EditText со String полем. Вы должны сравнить String с String .

Вот как это сделать:

 String answer = ((EditText) findViewById(R.id.tvReponseF)).getText().toString(); if(answer.equals(answers[CurrentQuestionIndex])) { ... 

Проблема в том, что вы увеличиваете индекс до фактической проверки правильности ответа:

 ask_question.setText(question[(CurrentQuestionIndex++) % (questions.length)]); 

Итак, если индекс вопроса равен 0, вы получите вопрос 0, тогда индекс вопроса станет 1 из-за оператора ++ и вы будете читать ответ 1 вместо 0. Надеюсь, вы это поняли. Что вам нужно сделать, так это удалить здесь ++ и поместить его здесь:

 if(answer.getText().toString().equals(answers[(CurrentQuestionIndex++) % (questions.length)])) 

Потому что на этом этапе вы прочтете правильный ответ и перейдете к следующему индексу.

EDIT :

Это была ваша самая большая проблема. Также вам нужно сравнить answer.getText().toString() как уже заметили другие парни.

Вам нужно получить текст из объекта EditText . Вы сравниваете объект EditText со String .

Итак, ваш полный код должен выглядеть так:

 final String questions[] = {"Who's Tom?", "Who's Luca?", "Who's Flavie?"} final String answers[] = {"American", "Italian", "French"} // display question answer_question.setOnClickListener(new View.OnClickListener() { int CurrentQuestionIndex = 0; public void onClick(View v) { ask_question.setText(question[(CurrentQuestionIndex++) % (questions.length)]); // discuss question versus answer EditText editText = (EditText) findViewById(R.id.tvReponseF); if(editText.getText().toString().equals(answers[CurrentQuestionIndex])) { alertMessageRight(); } else { alertMessageFalse(); } } }); 

Попробуй это:

 EditText et;//initialize first!! et.getText().toString().equals(....); 
  EditText answer = (EditText) findViewById(R.id.tvReponseF); if(answer.getText().toString().toLowerCase().equals(answers[CurrentQuestionIndex].toLowerCase())) { alertMessageRight(); } else { alertMessageFalse(); } } 

Я добавил toLowerCase (), чтобы сделать проблему нечувствительной к регистру.