209

I want to generate a number between 1 and 10 in Java.

Here is what I tried:

Random rn = new Random();
int answer = rn.nextInt(10) + 1;

Is there a way to tell what to put in the parenthesis () when calling the nextInt method and what to add?

Eric Leschinski
  • 135,913
  • 89
  • 401
  • 325
Shania
  • 2,285
  • 3
  • 12
  • 11

3 Answers3

298

As the documentation says, this method call returns "a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive)". This means that you will get numbers from 0 to 9 in your case. So you've done everything correctly by adding one to that number.

Generally speaking, if you need to generate numbers from min to max (including both), you write

random.nextInt(max - min + 1) + min
Malcolm
  • 40,120
  • 11
  • 68
  • 91
93

The standard way to do this is as follows:

Provide:

  • min Minimum value
  • max Maximum value

and get in return a Integer between min and max, inclusive.

Random rand = new Random();

// nextInt as provided by Random is exclusive of the top value so you need to add 1 

int randomNum = rand.nextInt((max - min) + 1) + min;

See the relevant JavaDoc.

As explained by Aurund, Random objects created within a short time of each other will tend to produce similar output, so it would be a good idea to keep the created Random object as a field, rather than in a method.

Scary Wombat
  • 43,525
  • 5
  • 33
  • 63
  • 7
    `Random rand = new Random();` I would go so far as to say that it must be a field. `Random` objects created within a short time of each other will tend to produce similar output. So many calls to `randInt` within a short period of time will not give evenly distributed output. – Aurand Dec 05 '13 at 01:56
24

This will work for generating a number 1 - 10. Make sure you import Random at the top of your code.

import java.util.Random;

If you want to test it out try something like this.

Random rn = new Random();

for(int i =0; i < 100; i++)
{
    int answer = rn.nextInt(10) + 1;
    System.out.println(answer);
}

Also if you change the number in parenthesis it will create a random number from 0 to that number -1 (unless you add one of course like you have then it will be from 1 to the number you've entered).

Eric Leschinski
  • 135,913
  • 89
  • 401
  • 325
Demosthanes
  • 309
  • 2
  • 7