有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何获取非重复随机整数?

我有一个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) 个答案

  1. # 1 楼答案

    好的,随着更多的问题被添加到你的数据库中, 您不能仅从数据库检索一次问题列表。你必须在每次点击按钮时都这样做。 现在您有两种选择:

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

    • 从arraylist和数据库中删除已使用的问题(如果未在其他地方使用,则无需删除该问题)

  2. # 2 楼答案

    全局数组列表声明

     ArrayList<Integer> integers; // as globle
    

    //onCreate

    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));
    

    以上代码每次生成新的整数

  3. # 3 楼答案

    与每次生成新问题时都检索行不同,您可以将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;
    }
    
    

    这应该能奏效