#java #android #checkbox
#java #Android #флажок
Вопрос:
У меня есть четыре флажка вместе с textview, который отображает вопрос. Я пытаюсь создать простой тест с несколькими вариантами ответов с флажками.Мне удалось отобразить всплывающее окно для пользователя, если он выберет правильный ответ. и тост, если они выбирают неправильный ответ. Проблема, с которой я сталкиваюсь, заключается в том, что если пользователь выбирает все ответы, он считается правильным. Кто-нибудь может мне помочь с этим. Результирующие переменные сохраняют результат флажков в виде строки, и я сравниваю его с правильным ответом.
if(result1 == firstQuestion.getCorrectAnswer() amp;amp; result2 == firstQuestion.getSecondCorrectAnswer()){
currentScore = currentScore 1 userScore;
Intent i = new Intent(CheckBoxQuestions.this, ResultScreen.class);
i.putExtra("finalScore",currentScore);
startActivity(i);
}else{
Toast.makeText(CheckBoxQuestions.this, "Incorrect", Toast.LENGTH_SHORT).show();
currentScore = currentScore 0 userScore;
Intent i = new Intent(CheckBoxQuestions.this, ResultScreen.class);
i.putExtra("finalScore",currentScore);
startActivity(i);
}
}
});
}
Комментарии:
1. Для этого я бы использовал
radio button array
(допускается только один выбор). В противном случае вам придется управлятьradio functionality
самостоятельно.2. Можете ли вы предоставить более подробную информацию?
3. является ли result1 строкой? Затем используйте .equals() . == сравнивает ссылки. Если .equals не переопределяется, это == . Однако в String Class .equals переопределен, позволяя ему сравнивать строки по назначению.
4. Одним из элегантных решений было бы использовать группу кнопок, чтобы разрешить только один выбор, если это возможно в контексте вашей проблемы. Если пользователь должен иметь возможность выбирать разные решения (может быть несколько правильных ответов), то вам, вероятно, следует инвертировать тест. Это проверка того, что пользователь ответил правильно. Если пользователь должен выбрать все правильные решения и только те, вы должны проверить, что все правильные ответы проверены и ни один неправильный ответ не отмечен.
5. пожалуйста, опубликуйте полный код
Ответ №1:
Вы сравниваете результат, который является строкой, с ==
. ==
Операция сравнивает ссылки на два объекта (или значения для примитива). Поскольку строки являются объектами, ==
не рекомендуется сравнивать символы. Вместо этого используйте .equals()
метод. <String>.equals(<other String>)
.equals()
Метод, определенный в Object
, такой же, как ==
. Однако многие объекты, такие как строки, переопределяют .equals()
в случае строк для сравнения посимвольно.
Комментарии:
1. Возможно, я неправильно истолковал вопрос, но, похоже, он / она сравнивает строки, поскольку он / она сказал, что код работает, если пользователь отвечает правильно… Это могут быть целые числа или перечисления…
2. @ebigeon да, op говорит, что результаты хранятся в виде строк, так что … странно, почему == работает для 2 строк, которые являются новыми строками, отсутствующими в пуле строк, не ссылающихся друг на друга. Необходимо показать больше кода.
Ответ №2:
Вы должны использовать RadioGroup и RadioButton, как указано ниже, это позволит вам выбрать только один переключатель, то есть только один ответ. Переключатели будут находиться в одной группе переключателей.
<RadioGroup
android:layout_width="match_parent"
android:layout_height="wrap_content">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Radio Button 1"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Radio Button 2"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Radio Button 3"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Radio Button 4"/>
</RadioGroup>
Ответ №3:
Одним из элегантных решений было бы использовать группу кнопок, чтобы разрешить только один выбор, если это возможно в контексте вашей проблемы. Если пользователь должен иметь возможность выбирать разные решения (может быть несколько правильных ответов), то вам, вероятно, следует инвертировать тест. Это проверка того, что пользователь ответил правильно.
Чтобы показать последнее с помощью кода:
if(isCorrectAnswers(firstQuestion) amp;amp; !hasIncorrectAnswer(firstQuestion)) {
... // React for correct answer
} else {
... // React for incorrect answer
}
с
private boolean isCorrectAnswers(AnswerSelectionChoice choice) {
return choice.isSelectedCorrectChoice() amp;amp; isSelectedSecondCorrectChoice() amp;amp; ...;
}
и
private boolean hasIncorrectAnswer(AnswerSelectionChoice choice) {
return choice.isSelectedIncorrectChoice() || isSelectedSecondIncorrectChoice() || ...;
}