【问题标题】:Compare two integers doesn't work correctly in Android比较两个整数在 Android 中无法正常工作
【发布时间】:2017-12-09 00:56:20
【问题描述】:

我有一个方法必须将整数与 Arraylist 进行比较,如果整数上的数字在 arraylist 上,我会收到错误的结果。如果整数不在数组列表中,我会收到一个 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();
    }
}

所以,我所拥有的是关于正确类别的所有问题,但它重复了这些问题,我不知道为什么。

谁能帮帮我?

谢谢!

【问题讨论】:

  • 你确实需要调试这段代码才能找出错误。
  • 要从List 中随机选择n 问题而不替换,请使用Collections.shuffle 随机排列列表,然后从中取出第一个n 项目。
  • @DawoodibnKareem get(iny) 与 get(object) 不同是什么意思?这是我的错误吗?
  • 不,我完全错了,所以我没有回答这个问题。我将不得不更仔细地研究你的问题。
  • 好的,我等@DawoodibnKareem 非常感谢!

标签: java android arraylist compare


【解决方案1】:

如下替换您的退货

private boolean checkRandom()
{
    for(int i = 0; i < listRandom.size(); i++)
    {
        if(questionPosition == listRandom.get(i))
        {
            return true;
        }
    }

    return false;
}

【讨论】:

  • 我试试。等待! :)
  • 正如问题所说:如果整数上的数字在数组列表中,我收到一个错误所以,现在这样很好!
  • 正如您在问题中看到的,如果整数在数组列表中,我会收到错误消息,而在另一种方法中,当我调用 checkRandom 时,我会使用“!checkRandom()”来调用它。如果整数在数组列表中,感叹号检查是针对我想要接收的这个错误值。我尝试了你的答案,但它不起作用。
  • 我的东西最好的方法是使用Collection类并使用Binary search the Id来检查是否存在,会更有效
【解决方案2】:

虽然将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

【讨论】:

  • 我没有重复,我的意思是...我有一个随机数,与有问题的 ArrayList 进行比较,但 ArrayList 没有重复。
【解决方案3】:

我解决了!我必须像这样更改 while 条件:

while(!listPhase.get(questionPosition).equals("E") || (listPhase.get(questionPosition).equals("E") && !checkRandom()))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多