如何解决此问题,以便我拥有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());
}
}
答案 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个随机整数,那么可以多次获得相同的数字。