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

Моя программа отображает множество вопросов (вопрос один за другим). После того как я напишу ответ, предупреждающее сообщение должно сообщить мне, правильно ли я прав. Проблема в том, что даже если я напишу правильный ответ, в предупреждающем сообщении появится сообщение «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 (), чтобы сделать проблему нечувствительной к регистру.