如何生成每个数字位于数字范围内的随机数?

时间:2016-12-03 01:45:06

标签: java random unique

我试图弄清楚如何在数组中生成和存储10个随机数,其中数字是两位数,每个数字在0-7范围内。例如,10,23,35,77都可以,但不是1,78,89,99。而且,我想确保所有数字都是唯一的。这是我到目前为止所做的......

import java.util.Random;
public class RandomNum{
      public static void main(String[] args){
            Random rand=new Random();
            int[] randomFirstDigit=new int[10];
             int[] randomSecondDigit=new int[10];

             for(int i=0;i<10;i++){
                 randomFirstDigit[i]=rand.nextInt(7-1+1)+1;
             }
             for(int i=0;i<10;i++){
                 randomSecondDigit[i]=rand.nextInt(7-1+1)+0;
             }
             int[] randomArr=new int[10];
             for(int i=0;i<10;i++){
             randomArr[i]=(randomFirstDigit[i]*10)+randomSecondDigit[i];
             }
             for(int i=0;i<=randomArr.length;i++){
                 System.out.println(randomArr[i]);
             }
      }
}

上述代码的主要问题是,有时数组值不是唯一的。换句话说,两个相同的数字存储在数组中,如23,23。

任何人都可以帮我解决问题。

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

更简单且计算量更低的解决方案是一次生成一个数字,然后将其附加到字符串。之后你可以将它转换为整数。

要准确生成10个唯一数字,我们可以将生成的每个数字添加到HashSet,其中每个元素必须是唯一的。我们可以继续这个,直到HashSet有10个元素。

/**
 * The `sizeof` an element in array 'arr'.
 */
#define ELEMSIZE(arr) sizeof(*arr)
/**
 * The number of elements in array 'arr'.
 */
#define ARRAYSIZE(arr) sizeof(arr)/ELEMSIZE(arr)