3 回答
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;
}
这应该可以解决问题
TA贡献1853条经验 获得超9个赞
好的,随着更多问题被添加到您的数据库中,您无法仅从数据库中检索问题列表一次。您必须在每次单击按钮时执行此操作。所以现在你有两个选择:
维护已使用的索引/数字的列表:当您生成下一个随机数时,它应该与这些索引/数字不同。如果相同则重新生成。此外,为此,添加到数据库或从数据库检索的问题不应更改先前问题的顺序。
从数组列表中删除使用过的问题(如果不在其他地方使用则不需要)和数据库
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));
上面的代码每次都会生成新的整数
添加回答
举报