2013-03-18 99 views
-1

我將如何使2個隨機int生成器不生成相同的整數?假設程序運行,我的示例類在下面。感謝您的幫助。需要2個int生成器不生成相同的int

public class TestRandom{ 
    int num; 

    public TestRandom(){ 
     num = 0; 
    } 
    public TestRandom(int x){ 
     num = x; 
    } 
    public String toString(){ 
     String print; 
     if (num == 1) 
      print = "1"; 
     else if(num == 2) 
      print = "2"; 
     else 
      print = "---"; 
     return print; 
    } 
} 

public class Test{ 
    TestRandom[] s= new TestRandom[20]; 
    Random ran = new Random(); 
    public void setArray(){ 
     for(int i=0; i<s.length; i++) 
      s[i] = new TestRandom(); 

     for(int k=0; k<4; k++) 
      int RandomNum = ran.nextInt(s.length); 
     s[RandomNum] = new TestRandom(1); 

     for(int e=0; e<4; e++) 
      int RandomNum = ran.nextInt(s.length); 
     s.[RandomNum] = new TestRandom(2); 
    } 
} 
+1

1)對代碼塊使用一致的邏輯縮進。代碼的縮進旨在幫助人們理解程序流程。 2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http://sscce.org/)。 – 2013-03-18 05:54:04

+0

我修復了一些你的格式。請考慮將來做類似的事情。它使我們能夠更輕鬆地琢磨您的代碼。 – tjameson 2013-03-18 06:23:37

+0

感謝您幫助我進行格式化。我會記住將來的參考。 – Phong 2013-03-18 06:31:40

回答

1
  1. 如果你把兩個發電機不產生相同數量的它不是隨機的。

  2. 如果您無論如何都希望該功能使用單個實例,並且生成的第二個數字與前一個數字相同,則會生成另一個數字。

請注意,隨機性和唯一性並不是真的一起去。

+0

謝謝你,Thihara。 – Phong 2013-03-18 06:32:46

0

試試這個

import java.util.Random;  
public class TestRandom{ 
    int num=0; 
    int num2=0; 
    Random ran = new Random(); 
    num = ran.nextInt(); 
    num2 = ran.nextInt(); 
    System.out.print(num+" "+num2); 
} 
+0

該代碼如何強制*「不生成相同的整數」*? – 2013-03-18 06:01:04

+1

它可能會生成相同的整數。我只是給出一個想法,並讓馮認爲如何使整數不相同 – user2081680 2013-03-18 06:03:08

+0

關於'評論或回答'的滑動範圍,我認爲這更好地符合'評論',因爲它沒有解決OPs問題的重要部分。當然,你沒有足夠的代表。尚未發表評論,但要耐心等待。 – 2013-03-18 06:05:46

0

將每個生成的int添加到一個集合中。

檢查生成的每個int以查看該集合中是否存在int。

如果是,則生成一個新的int。

例如

public class Test{ 
    TestRandom[] s= new TestRandom[20]; 
    Random ran = new Random(); 
    public void setArray(){ 
    for(int i=0; i<s.length; i++) 
     s[i] = new TestRandom(); 

    HashSet<Integer> usedInts = new HashSet<Integer>(); 
    for(int k=0; k<4; k++) { 
     int RandomNum; 
     do { 
     RandomNum = ran.nextInt(s.length); 
     } while (!usedInts.add(RandomNum)); // loop until RandomNum not duplicated 
     s[RandomNum] = new TestRandom(1); 
    } 
    for(int e=0; e<4; e++) { 
     int RandomNum; 
     do { 
     RandomNum = ran.nextInt(s.length); 
     } while (!usedInts.add(RandomNum)); // loop until RandomNum not duplicated 
     s.[RandomNum] = new TestRandom(2); 
    } 
    } 
+0

即使這是對我的編程技巧,謝謝你的答案。 User217 – Phong 2013-03-18 06:49:09