Solved

UNIQUE random number

Posted on 2004-10-03
11
226 Views
Last Modified: 2010-03-31
I have a constructor that needs to assign a unique random number to one of its variable everytime it is been constructed. Can someone tell me how can that be done? I mean, it has to be unique. hm~~~ Does normal random number generator guarantee unique number??
           
0
Comment
Question by:jtcy
  • 3
  • 3
  • 3
  • +1
11 Comments
 
LVL 92

Expert Comment

by:objects
ID: 12210652
no a random number generator will not guarantee uniquness.
you could store all the generated numbers in a Set, and check if it already exists using that (generating a new one if it did.
0
 

Author Comment

by:jtcy
ID: 12210670
so smth like...


------------------------------------


import java.util.Random;

public class Key
  {
     private int randomNumber;
     Set mySet = new Set();
   
     public Key()
      {
          Random generator = new Random();
          randomNumber = generator.nextInt();
          while (mySet.contains(randomNumber))
                randomNumber = generator.nextInt();
      }
}
               

-------------------------------------------------------------------
?

0
 
LVL 92

Expert Comment

by:objects
ID: 12210682
yep
0
 

Author Comment

by:jtcy
ID: 12210687
oops. Should be:

------------------------------------


import java.util.Random;

public class Key
  {
     private int randomNumber;
     Set mySet = new Set();
   
     public Key()
      {
          Random generator = new Random();
          randomNumber = generator.nextInt();
          while (mySet.contains(randomNumber))
                randomNumber = generator.nextInt();
          mySet.add(randomNumber);
      }
}
               

-------------------------------------------------------------------
0
 
LVL 92

Expert Comment

by:objects
ID: 12210689
you need to use the Integer wrapper class so you can add them to the set.
0
How to improve team productivity

Quip adds documents, spreadsheets, and tasklists to your Slack experience
- Elevate ideas to Quip docs
- Share Quip docs in Slack
- Get notified of changes to your docs
- Available on iOS/Android/Desktop/Web
- Online/Offline

 

Author Comment

by:jtcy
ID: 12210694
Do u mean...

mySet.add((Integer)randomNumber);


0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12210776
mySet.add(new Integer(randomNumber));
0
 
LVL 21

Accepted Solution

by:
MogalManic earned 20 total points
ID: 12211163
I all you want is a number with a high probability that it is unique, do the following:

   private static Random generator=new Random();
   public int getKey()
   {
          return generator.nextInt() ^ System.currentTimeMillis()
   }
  The current time in millis will be unique as long as two threads don't call getKey at the same time.  If so, the random number should ensure uniqueness.
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12211183
That would have to be:


return generator.nextInt() ^ (int)System.currentTimeMillis();
0
 
LVL 21

Expert Comment

by:MogalManic
ID: 12211314
no, Javas automatic conversion would be more correct  the following is what java does automatically:
    return (int) ((long) generator.nextInt() ^ System.currentTimeMillis());

OR if you did not want to drop bits
private static Random generator=new Random();
   public long getKey()
   {
         return generator.nextLong() ^ System.currentTimeMillis()
   }
0
 
LVL 86

Expert Comment

by:CEHJ
ID: 12211415
>>the following is what java does automatically

Certainly doesn't in the version of sdk i'm using (1.5.0-beta2-b51)
0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Go is an acronym of golang, is a programming language developed Google in 2007. Go is a new language that is mostly in the C family, with significant input from Pascal/Modula/Oberon family. Hence Go arisen as low-level language with fast compilation…
Introduction This article is the second of three articles that explain why and how the Experts Exchange QA Team does test automation for our web site. This article covers the basic installation and configuration of the test automation tools used by…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
This video teaches viewers about errors in exception handling.

759 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now