为了账号安全,请及时绑定邮箱和手机立即绑定

如何获得不重复的随机整数?

如何获得不重复的随机整数?

繁花如伊 2023-09-13 15:32:07
我有这个Android应用程序,它非常简单,基本上我从数据库中获取一个字符串,然后按下一个按钮并获取另一个字符串,除了我想获取随机字符串并且一旦它们被“使用”后就不再重复它们    public String getQuestion() {        mydManager.openReadable();        ArrayList<String> tableContent = mydManager.retrieveRows();        int size = tableContent.size();        Random rand = new Random();        int rand_int = rand.nextInt(size);        String a = tableContent.get(rand_int);        String[] myarray = a.split("\n");        String Rquestion = (myarray[1]);        question = findViewById(R.id.question);        question.setText(Rquestion);        return a;    }一旦我得到数组中索引为 1 的问题,我不想在调用此函数时再次得到同样的问题
查看完整描述

3 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

ArrayList<String>您可以将 声明并初始化为全局变量,然后在获取随机变量后将其从数组中删除,而不是每次生成新问题时都检索行


private ArrayList<String> tableContent;

Random rand = new


public YourClass yourConstructor () { // or MainActivity initializer if android studio

        mydManager.openReadable();    

        tableContent = mydManager.retrieveRows();

}


public String getQuestion() {

        int size = tableContent.size();


        int rand_int = rand.nextInt(size);

        String a = tableContent.get(rand_int);


        //remove the element from arraylist

        tableContent.remove(a);


        String[] myarray = a.split("\n");

        String Rquestion = (myarray[1]);

        question = findViewById(R.id.question);

        question.setText(Rquestion);


        return a;

}


这应该可以解决问题


查看完整回答
反对 回复 2023-09-13
?
暮色呼如

TA贡献1853条经验 获得超9个赞

好的,随着更多问题被添加到您的数据库中,您无法仅从数据库中检索问题列表一次。您必须在每次单击按钮时执行此操作。所以现在你有两个选择:

  • 维护已使用的索引/数字的列表:当您生成下一个随机数时,它应该与这些索引/数字不同。如果相同则重新生成。此外,为此,添加到数据库或从数据库检索的问题不应更改先前问题的顺序。

  • 从数组列表中删除使用过的问题(如果不在其他地方使用则不需要)和数据库


查看完整回答
反对 回复 2023-09-13
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

全局数组列表声明


 ArrayList<Integer> integers; // as globle

//创建时


integers = new ArrayList<>();

public int gen(int i) {

        int alldata = i;

        Random rand = new Random();

        int rand_int = rand.nextInt(i);

        if (integers.size() == 0) {

            integers.add(rand_int);

        }else{

            if (integers.contains(rand_int)) {

                return gen(i);

            } else {

                integers.add(rand_int);

            }

        }

        return rand_int;

    }



int size = tableContent.size();

String a = tableContent.get(gen(size));

上面的代码每次都会生成新的整数


查看完整回答
反对 回复 2023-09-13
  • 3 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信