我有一个方法必须比较一个整数和一个Arraylist,如果整数上的数字在arraylist上,我收到一个假。如果整数不在arraylist上,我会收到一个真实的。
我需要这个,因为我正在制作一个测验游戏,对BBDD有一些问题而且我不能两次显示相同的问题。此问题分为三类:E,I和A.我必须展示五个E问题,然后五个问题,然后五个A问题。
因此,我必须在不重复的情况下展示问题,并且每个类别中都有5个问题。我制作这种方法,但我不知道为什么它会重复一些问题。
唯一正确的是类别问题。我总是有5个问题,然后是5个问题和至少5个问题。
告诉我问题是否在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();
}
}
所以,我所拥有的是关于正确类别的所有问题,但它重复了这些问题,我不知道为什么。
任何人都可以帮助我吗?
谢谢!
答案 0 :(得分:0)
将您的回报替换为以下
private boolean checkRandom()
{
for(int i = 0; i < listRandom.size(); i++)
{
if(questionPosition == listRandom.get(i))
{
return true;
}
}
return false;
}
答案 1 :(得分:0)
尽管将ArrayList
转换为HashSet
有效地删除了重复项,但如果您需要保留广告订单,我建议您使用此变体
list is some List of Strings
Set < String > s = new LinkedHashSet < > (list);
然后,如果您需要返回List
引用,则可以再次使用转换构造函数。
答案 2 :(得分:0)
我解决了!我必须像这样改变while条件:
(1)