2013-03-18 106 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