生成随机数而不重复 - java

时间:2014-01-15 01:57:33

标签: java random

我正在编写一个复杂的数学运算程序。我从文件中读取数字,然后使用这些数字生成尽可能多的10个随机数的集合,其总和为590,并且具有5个偶数和5个奇数(奇数和偶数的和和数可以改变)。 每次运行代码时,我都会得到重复的集合或带有集合的重复数字。

如何解决此问题,以便我拥有10个唯一数字的唯一集合?

这是我的代码:

 public static void main(String args[])
  {
     List<Long> numbers = new ArrayList<Long>();
  try{
  FileInputStream fstream = new FileInputStream("numbers.txt");
  DataInputStream in = new DataInputStream(fstream);
  BufferedReader br = new BufferedReader(new InputStreamReader(in));
  String strLine;
  while ((strLine = br.readLine()) != null)   {
      numbers.add(Long.valueOf(strLine));
  }
  Long[] selectedNumbers = new Long[10];
  Random r = new Random();
  for (int j =0; j<100000; j++){
      long sum = 0;
      int odd = 0;
      int even = 0;
      for(int i = 0; i < selectedNumbers.length; i++){
          selectedNumbers[i] = numbers.get(r.nextInt(numbers.size()));
          if (selectedNumbers[i] % 2 == 0)
          {
              even++;
          } 
          else
          {
              odd++;
          }
          sum = sum + selectedNumbers[i];         
      }

          if (even == 5 && sum == 590 )
          {
              for(int k = 0; k < selectedNumbers.length; k++)
              {
                  System.out.print(selectedNumbers[k] + "\t");
              }
              System.out.print("\n");
          }



  }
  in.close();
    }catch (Exception e){//Catch exception if any
  System.err.println("Error: " + e.getMessage());
  }
  }

3 个答案:

答案 0 :(得分:0)

this网站上查看SecureRandom。它符合FIPS140-2或至少符合。我用它来生成“随机”128位GUID用作数据库ID,我可以肯定地说,在测试中我已经将大约5000万条记录插入到数据库中,而且从来没有一次输入相同的数字。

答案 1 :(得分:0)

system-time + randomNumber可以确保你的号码不重复!

答案 2 :(得分:0)

您正在使用您在开头读到的相同数组,并使用随机索引值来选择它的元素。

这不是你的帖子所说的:

  

...生成尽可能多的10个随机数的集合   sum是590,有5个偶数和5个奇数...

同样,您的10(或实际输入的任何数字)值不会随机挑选。只有他们的订单不同。并且,是的,如果您从0到10十次选择10个随机整数,那么可以多次获得相同的数字。