2017-09-25 70 views
0

我有誰隨機1和5 這種方法需要停止在所有5個號碼進行排序太之間的號碼的方法(不這樣做了)生成隨機數只有一次

我的實際代碼是:
public ArrayList<String> generated = new ArrayList<String>();頂部

而且方法本身是:

public int RandomizeQuestion() { 
    // Question numbers 
    final int min = 1; 
    final int max = 5; 

    Random r = new Random(); 
    int qran = r.nextInt((max - min) + 1) + min; 

    if (Collections.singletonList(generated).contains(qran)) { 
     RandomizeQuestion(); 
    } else { 
     generated.add(String.valueOf(qran)); 
    } 

    return qran; 
} 

但是,出現這種情況是所有的時間隨機數顯示爲新的,並且這個數量在發電機重複添加陣列。

+0

你覺得呢'Collections.singletonList(產生的)'呢? – shmosel

+0

爲什麼你的方法返回一個值? – shmosel

+1

爲什麼不在遞歸之前檢查列表的長度? – shmosel

回答

1

Collections.singletonList(generated)返回包含generated作爲其唯一元素的List<ArrayList<String>>。顯然這將不包含qran。另外,在嘗試添加新項目之前,您並未檢查列表是否爲預期的長度。像這樣的東西應該工作:

但這裏有一個更簡單,更高效的洗牌值序列方式:

// generate a list of values between min and max 
generated = IntStream.rangeClosed(min, max) 
     .map(String::valueOf) 
     .collect(Collectors.toCollection(ArrayList::new)); 

// shuffle them 
Collections.shuffle(generated); 
+0

我需要一種方法來生成一個數字,但檢查數字是否已經生成。如果是,則生成一個新號碼,如果沒有,則返回。 我在另一個方法中調用這個方法,每次生成這個隨機數。 –