2013-03-17 41 views
0

所以,我试图生成长度为3的随机独特数字数组从1到25,我不明白为什么我的代码不工作,我会非常感谢一些帮助!从1到25生成3个随机数? (JAVA)

public void generateRandom() { 
    for(int j=0; j<3; j++) { 
     dots[j] = (int) (Math.random()*(col*row)+1); 
     System.out.println(dots[j]); 
     for(int i=j; i>0; i--) { 
      if(dots[j]==dots[j-1]) { 
       generateRandom(); 
      } 
     } 
    } 
} 

dots[]是我试图保存3张独特的随机数的数组。顺便说一句,col*row == 25

+0

等等......为什么要使用for和then recursivity? – 2013-03-17 20:24:21

回答

0

每次generateRandom自称,它从头开始下载与第一随机数,而不是选择一个新的随机数的当前位置。

+0

这应该不重要,应该吗?因为无论如何,最终阵列会填充3个随机数。 – LowLanding 2013-03-17 20:17:02

+0

如果是这样的话,你首先不会有问题。 – 2013-03-17 20:19:21

5

这是一个有点不同的方法。它依赖于创建一个具有指定值的ArrayList,然后对该列表进行混洗。一旦列表被混洗,您可以根据混洗列表中前三个元素创建一个数组。

public static void main(String[] args) { 
    List<Integer> list = new ArrayList<Integer>(); 
    for(int i = 0; i < 26; i++){ 
     list.add(i); 
    } 

    Collections.shuffle(list); 
    Integer[] randomArray = list.subList(0, 3).toArray(new Integer[3]); 

    for(Integer num:randomArray){ 
     System.out.println(num); 
    } 
} 
+1

打败我这种做法。如果范围相当小,这是实现这一点的直接方式。 – millimoose 2013-03-17 20:23:14

0

这是方法

public void generateRandom() { 
    for(int j=0; j<3; j++) { 
     boolean f; 
     do { 
     dots[j] = (int) (Math.random()*(col*row)+1); 
     f = false; 
     for(int i=j-1; i>=0; i--) { 
      if(dots[i]==dots[j]) { 
       f = true; 
       break; 
      } 
     } 
     if (!f) 
      System.out.println(dots[j]); 
     } while (f); 
    } 
} 

它的重复数的产生,直到发现没有重复。

2
for(int j=0;j<3;j++) 
    dots[j]=(int)(Math.random()*Integer.MAX_VALUE)%25+1; 

由于您的Math.random反正是一个随机数,通过Integer.MAX_VALUE乘以不会影响随机性。另外,如果你想解释为什么你的代码不工作,那是因为如果数字相对较小,比如说在0.001下,那么当你乘法时得到int就会得到0。