I am looking for solution to pick number randomly from an integer array.
For example I have an array new int[]{1,2,3}
, how can I pick a number randomly?
I am looking for solution to pick number randomly from an integer array.
For example I have an array new int[]{1,2,3}
, how can I pick a number randomly?
public static int getRandom(int[] array) {
int rnd = new Random().nextInt(array.length);
return array[rnd];
}
You can use the Random generator to generate a random index and return the element at that index:
//initialization
Random generator = new Random();
int randomIndex = generator.nextInt(myArray.length);
return myArray[randomIndex];
If you are going to be getting a random element multiple times, you want to make sure your random number generator is initialized only once.
import java.util.Random;
public class RandArray {
private int[] items = new int[]{1,2,3};
private Random rand = new Random();
public int getRandArrayElement(){
return items[rand.nextInt(items.length)];
}
}
If you are picking random array elements that need to be unpredictable, you should use java.security.SecureRandom rather than Random. That ensures that if somebody knows the last few picks, they won\'t have an advantage in guessing the next one.
If you are looking to pick a random number from an Object array using generics, you could define a method for doing so (Source Avinash R in Random element from string array):
import java.util.Random;
public class RandArray {
private static Random rand = new Random();
private static <T> T randomFrom(T... items) {
return items[rand.nextInt(items.length)];
}
}
use java.util.Random
to generate a random number between 0 and array length: random_number
, and then use the random number to get the integer: array[random_number]
Use the Random class:
int getRandomNumber(int[] arr)
{
return arr[(new Random()).nextInt(arr.length)];
}
Since you have java 8, another solution is to use Stream API.
new Random().ints(1, 500).limit(500).forEach(p -> System.out.println(list[p]));
Where 1
is the lowest int generated (inclusive) and 500
is the highest (exclusive). limit
means that your stream will have a length of 500.
int[] list = new int[] {1,2,3,4,5,6};
new Random().ints(0, list.length).limit(10).forEach(p -> System.out.println(list[p]));
Random is from java.util
package.
You can also use
public static int getRandom(int[] array) {
int rnd = (int)(Math.random()*array.length);
return array[rnd];
}
Math.random()
returns an double
between 0.0
(inclusive) to 1.0
(exclusive)
Multiplying this with array.length
gives you a double
between 0.0
(inclusive) and array.length
(exclusive)
Casting to int
will round down giving you and integer between 0
(inclusive) and array.length-1
(inclusive)
Take a look at this question:
How do I generate random integers within a specific range in Java?
You will want to generate a random number from 0 to your integers length - 1. Then simply get your int from your array:
myArray[myRandomNumber];
Java has a Random class in the java.util package. Using it you can do the following:
Random rnd = new Random();
int randomNumberFromArray = array[rnd.nextInt(3)];
Hope this helps!
package workouts;
import java.util.Random;
/**
*
* @author Muthu
*/
public class RandomGenerator {
public static void main(String[] args) {
for(int i=0;i<5;i++){
rndFunc();
}
}
public static void rndFunc(){
int[]a= new int[]{1,2,3};
Random rnd= new Random();
System.out.println(a[rnd.nextInt(a.length)]);
}
}
You can also try this approach..
public static <E> E[] pickRandom_(int n,E ...item) {
List<E> copy = Arrays.asList(item);
Collections.shuffle(copy);
if (copy.size() > n) {
return (E[]) copy.subList(0, n).toArray();
} else {
return (E[]) copy.toArray();
}
}