2014-10-31 347 views
3

我試圖生成一個大於並小於前面的隨機數的隨機數,但無法弄清楚如何。生成一個大於或小於前面的隨機數的隨機數

我有這個至今:

number = (int)(max * Math.random()) + min; 
guess = (int)(max * Math.random()) + min; 
if (guess<number) 
    { 
     guess = (int)(max * Math.random()) + min; 
     System.out.println(guess); 
    } 
else if (guess>number) 
{ 
     guess = (int)(max * Math.random()) + min; 
    System.out.println(guess); 
} 

UPDATE:我如何確保它不會產生它已經產生的隨機數?計算機得到10次嘗試猜測產生的數字,但我想讓它邏輯的方式,它不會產生一個它已經知道是錯誤的。

+1

你怎麼樣添加一個循環,直到你獲得更高的(或更小)是多少?當然,還有更有效的方法,但這是我能想到的最簡單的事情。 – 2014-10-31 00:32:40

+0

哦,那是行不通的!那麼,循環產生隨機數,直到我得到一個更高的數字? @MatiCicero – 2014-10-31 00:33:58

+0

只是一種方法,雖然 – 2014-10-31 00:34:36

回答

2

有關訂購的隨機數列表...

public static void method2() throws Exception { 
    Random rng = new SecureRandom(); 
    Set<Integer> numbers = new HashSet<>(); 
    while (numbers.size() < 3) { 
     // number only added if not already present in Set, set values are unique 
     numbers.add(rng.nextInt(MAX)); 
    } 
    List<Integer> numberList = new ArrayList<>(numbers); 
    Collections.sort(numberList); 
    // lower random at index 0, mid at index 1 
    // you can guess where the other one is hiding 
    System.out.println(numberList); 
} 

我把什麼他們在一組首先要確保沒有重複。當然,如果MAX的值爲1,則可能需要一段時間。

這種方法的一個優點是數字應該分佈在0到MAX之間。如果直接使用範圍,則必須處理上限和下限。

當然,只要最大值(顯着)高於列表中數字的數量(在本例中僅爲3),此方法也可以輕鬆擴展以適用於範圍。

+0

我不認爲這是我正在尋找的,對於我的具體計劃,但是我明白你來自哪裏。但是有沒有一種更基本的製作清單的方法,並且確保沒有任何模糊產生? – 2014-10-31 01:24:21

+0

當然,您可以創建一個列表,並在添加數字時檢查它們是否唯一。對於一個小列表來說,這當然很好。當然,使用'TreeSet'甚至會更好,但我不想完全嚇到你。 – 2014-10-31 01:28:49

+0

我絕對不是一個高級的Java程序員,那麼有沒有一個基本的方法來檢查模糊,並確保猜測不等於一個騙局 – 2014-10-31 01:31:59

0

這將始終返回的數字是這樣的:少< =數量< =更多

number = (max * Math.random()) + min; 
    less = (number * Math.random()) + min; 
    more = ((max - number) * Math.random()) + number; 

編輯: 曲解了問題。

+0

因爲在生成隨機數之前設置了最大值,並且此代碼允許隨機數超過該值。 – 2014-10-31 00:44:38

+0

哦,我已經提出了一個新的答案。請重新考慮一下。 – habitats 2014-10-31 01:09:30

+0

如果:number = min,例如0. – 2014-10-31 01:25:18

0

如果計算機播放器收到其猜測值過低或過高(或正確)的信息,則需要跟蹤可能值的範圍,以確定正確的值。最初,這是整個範圍,min..max。一旦你猜的值不正確,則無論是移動還是minmax

if (guess<number) 
{ 
    min = guess + 1; // Don't guess any more number <= guess 
} 
else if (guess>number) 
{ 
    max = guess - 1; // Don't guess any more number >= guess 
} 
else 
{ 
    // I WIN!! 
} 

現在你總是有正確的範圍minmax之間有效的猜測。

現在,您在該範圍內生成隨機數的邏輯似乎有點偏離。 This answer在@求解的答案鏈接的問題有正確的邏輯:

guess = (int)((max - min) * Math.random() + 1) + min;