我有一个方法,必须将整数与数组列表进行比较,如果整数上的数字在数组列表中,我会收到一个假数。如果整数不在数组列表中,我会收到一个 true。
我需要这个,因为我正在制作一个问答游戏,在 BBDD 上有一些问题,我不能两次显示同一个问题。这个问题也分为三类:E、I 和 A。我必须展示五个E问题,然后是五个I问题,然后是五个A问题。
所以我必须展示问题而不重复它们,每个类别还有 5 个。我做了这种方法,但我不知道为什么它会重复一些问题。
唯一正常工作的是类别问题。我总是有 5 个 E 问题,然后是 5 个 I 问题和至少 5 个 A 问题。
告诉我问题是否在 ArrayList 上的方法:
private boolean checkRandom()
{
for(int i = 0; i < listRandom.size(); i++)
{
if(questionPosition == listRandom.get(i))
{
return false;
}
}
return true;
}
我也尝试使用"等于",但我有相同的结果。
检查问题是否属于正确的类别且之前未显示的方法:
private void loadPhase() {
if (numQuestion < 15)
{
r = new Random();
questionPosition = r.nextInt(listQuestions.size());
if(numQuestion < 5)
{
while(!listPhase.get(questionPosition).equals("E") && (!listPhase.get(questionPosition).equals("E")|| !checkRandom()))
{
r = new Random();
questionPosition = r.nextInt(listQuestions.size());
}
}
else if(numQuestion > 4 && numQuestion < 10)
{
while(!listPhase.get(questionPosition).equals("I") && (!listPhase.get(questionPosition).equals("I")|| !checkRandom()))
{
r = new Random();
questionPosition = r.nextInt(listQuestions.size());
}
}
else if(numQuestion > 9)
{
while(!listPhase.get(questionPosition).equals("A") && (!listPhase.get(questionPosition).equals("A")|| !checkRandom()))
{
r = new Random();
questionPosition = r.nextInt(listQuestions.size());
}
}
listRandom.add(questionPosition);
header4questions.setText(listQuestions.get(questionPosition));
answer1.setText(listAnswers.get(questionPosition * 4));
answer2.setText(listAnswers.get((questionPosition * 4) + 1));
answer3.setText(listAnswers.get((questionPosition * 4) + 2));
answer4.setText(listAnswers.get((questionPosition * 4) + 3));
numQuestion++;
}
else {
Toast.makeText(getApplicationContext(), "You have finished the quiz!", Toast.LENGTH_SHORT).show();
uploadPoints();
}
}
所以,我所拥有的是正确类别的所有问题,但它重复了这些问题,我不知道为什么。
谁能帮我?
谢谢!
按如下方式替换您的退货
private boolean checkRandom()
{
for(int i = 0; i < listRandom.size(); i++)
{
if(questionPosition == listRandom.get(i))
{
return true;
}
}
return false;
}
尽管将ArrayList
转换为HashSet
可以有效地删除重复项,但如果您需要保留广告顺序,我宁愿建议您使用此变体
list is some List of Strings
Set < String > s = new LinkedHashSet < > (list);
然后,如果需要获取List
引用,可以再次使用转换构造函数。
答案参考:https://stackoverflow.com/a/204004/8252521
用户回答:https://stackoverflow.com/users/27565/abahgat
我解决了!我必须像这样更改while条件:
while(!listPhase.get(questionPosition).equals("E") || (listPhase.get(questionPosition).equals("E") && !checkRandom()))