亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲得不重復的隨機整數?

如何獲得不重復的隨機整數?

繁花如伊 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 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號