如何在 Kotlin 中随机从 ArrayList 中提取条目?
How do I pull entries from an ArrayList at random in Kotlin?
这是我的第一个 Kotlin 项目。我边学边学,遇到了障碍。
我有一个问题数组列表,我想以随机顺序将它们放入该应用程序中。我已经尝试将 .random 分配给分配问题的点(现在它被设置为 CurrentPosition-1)但是这只是随机化了问题并且没有将正确答案与问题一起拉出来。
如何将问题的答案捆绑在一起,或者是否有更好的方法让问题按顺序排列?我计划有 50 个以上的问题,但每次参加测试时只会显示 10 个。我不希望每次用户打开测试时都显示相同的 10 个问题。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiz_questions)
mQuestionsList=Constants.getQuestions()
setQuestion()
}
private fun setQuestion(){
val question = mQuestionsList!![mCurrentPosition-1]
defaultOptionsView()
if(mCurrentPosition == mQuestionsList!!.size){
submitBtn.text = "Finish"
}else{
submitBtn.text = "Submit"
}
progressBar.progress = mCurrentPosition
tv_progress.text = "$mCurrentPosition" + "/" + progressBar.max
tv_question.text = question!!.question
test_image.setImageResource(question.image)
tvOptionOne.text = question.optionOne
tvOptionTwo.text = question.optionTwo
tvOptionThree.text = question.optionThree
tvOptionFour.text = question.optionFour
}
private fun defaultOptionsView(){
val options = ArrayList<TextView>()
options.add(0, tvOptionOne)
options.add(1, tvOptionTwo)
options.add(2, tvOptionThree)
options.add(3, tvOptionFour)
这是我的数组
object Constants{
const val TOTAL_QUESTIONS: String = "total_questions"
const val CORRECT_ANSWERS: String = "correct_answers"
fun getQuestions(): ArrayList<Question>{
val questionsList = ArrayList<Question>()
val q1 = Question(
R.drawable.questionmark,
1,
"Who is Regional Manager of\n Dunder Mifflin Scranton?",
"Michael",
"Jim",
"Pam",
"Dwight",
1,
)
非常感谢任何帮助。提前谢谢你。
list.shuffled().take(10)
并且让你的 mQuestionsList
属性 类型 List 而不是 ArrayList 因为你不需要在检索后修改它。您可能还应该将其设置为 lateinit
或在其声明位置对其进行初始化,这样您就不必将类型设置为可空并不得不求助于 !!
,这通常是一种代码味道。所以我会把它声明为 var mQuestionsList: List<Question> = emptyList()
并且每当你想要新值时做 mQuestionsList = Constants.getQuestions().shuffled().take(10)
.
这是我的第一个 Kotlin 项目。我边学边学,遇到了障碍。
我有一个问题数组列表,我想以随机顺序将它们放入该应用程序中。我已经尝试将 .random 分配给分配问题的点(现在它被设置为 CurrentPosition-1)但是这只是随机化了问题并且没有将正确答案与问题一起拉出来。
如何将问题的答案捆绑在一起,或者是否有更好的方法让问题按顺序排列?我计划有 50 个以上的问题,但每次参加测试时只会显示 10 个。我不希望每次用户打开测试时都显示相同的 10 个问题。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_quiz_questions)
mQuestionsList=Constants.getQuestions()
setQuestion()
}
private fun setQuestion(){
val question = mQuestionsList!![mCurrentPosition-1]
defaultOptionsView()
if(mCurrentPosition == mQuestionsList!!.size){
submitBtn.text = "Finish"
}else{
submitBtn.text = "Submit"
}
progressBar.progress = mCurrentPosition
tv_progress.text = "$mCurrentPosition" + "/" + progressBar.max
tv_question.text = question!!.question
test_image.setImageResource(question.image)
tvOptionOne.text = question.optionOne
tvOptionTwo.text = question.optionTwo
tvOptionThree.text = question.optionThree
tvOptionFour.text = question.optionFour
}
private fun defaultOptionsView(){
val options = ArrayList<TextView>()
options.add(0, tvOptionOne)
options.add(1, tvOptionTwo)
options.add(2, tvOptionThree)
options.add(3, tvOptionFour)
这是我的数组
object Constants{
const val TOTAL_QUESTIONS: String = "total_questions"
const val CORRECT_ANSWERS: String = "correct_answers"
fun getQuestions(): ArrayList<Question>{
val questionsList = ArrayList<Question>()
val q1 = Question(
R.drawable.questionmark,
1,
"Who is Regional Manager of\n Dunder Mifflin Scranton?",
"Michael",
"Jim",
"Pam",
"Dwight",
1,
)
非常感谢任何帮助。提前谢谢你。
list.shuffled().take(10)
并且让你的 mQuestionsList
属性 类型 List 而不是 ArrayList 因为你不需要在检索后修改它。您可能还应该将其设置为 lateinit
或在其声明位置对其进行初始化,这样您就不必将类型设置为可空并不得不求助于 !!
,这通常是一种代码味道。所以我会把它声明为 var mQuestionsList: List<Question> = emptyList()
并且每当你想要新值时做 mQuestionsList = Constants.getQuestions().shuffled().take(10)
.