I have a two dimensional array 10x10 and I need to know the way to put 20 (-1)s in 20 random cells. Thats my array:
private int[][] array = new int[10][10];
I have a two dimensional array 10x10 and I need to know the way to put 20 (-1)s in 20 random cells. Thats my array:
private int[][] array = new int[10][10];
Pseudo code:
Generate a random number for first index range [0,9]
Generate a random number for the second index range [0,9]
Check if it has already been set:
if it has repeat until this is false
if it hasn't, continue below
Set the location
Repeat 19 more times.
Method randomHashSet()
gives you n (20)
numbers from 0 to 99. Then you can use easy math trick to map this one-dimension list to two-dimensions array.
Try this code:
import java.util.HashSet;
import java.util.Random;
import java.util.Set;
public class MyClass {
static int[][] array = new int[10][10];
public static void main(String[] args) {
Set<Integer> numbers = MyClass.randomHashSet(20);
for (Integer el : numbers) {
array[el / 10][el % 10] = -1;
}
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
public static Set<Integer> randomHashSet(int n) {
Set<Integer> set = new HashSet<Integer>();
Random random = new Random();
while (set.size() < n) {
set.add(random.nextInt(100));
}
return set;
}
}
List
which will represent elements from your two dimensional array. -1
. Collections.shuffle
may be helpful) (now -1 are at random places and you know that there are 20 of them)-1
back to two dimensional array. For instance if -1
is at position 23
place -1
in your array at position [2][3]
(/10
and %10
may be helpful here).This post discusses how to get a random number between any two bounds: Java Random number between -100 and 100
The legal array indexes for your 2D-array are between 0 and 9.
So get a random numbers between zero and nine, twice, and use those for the array index. You could get the same set twice, so you may need to keep track of the already-chosen indicies, or if (thatelement == -1)
is true, it was already set, so do it again.
To fill all elements with -1
, you could use (pre-7) System.arraycopy(o,i,o,i,i)
or (7 & 8) Arrays.copyOfRange(i[],i,i)
.
import java.util.Random;
public class ArrayGrid
{
public static void main(String[] args)
{
int[][] ranAr = new int[10][10];
// Complete 20 times
for(int i = 0; i < 20; i++)
{
// Get random value between 0-9
// for the array position
Random r = new Random();
int posOne = r.nextInt(10);
int posTwo = r.nextInt(10);
// Ensure the position has not already been set
while(ranAr[posOne][posTwo] == -1)
{
posOne = r.nextInt(10);
posTwo = r.nextInt(10);
}
// Set value to position
ranAr[posOne][posTwo] = -1;
}
// Print the grid to verify
for(int x = 0; x < 10; x++)
{
for(int j = 0; j < 10; j++)
{
System.out.printf("%5d ", ranAr[x][j]);
}
System.out.println();
}
}
}
Output:
0 0 0 -1 0 0 0 -1 0 0
-1 -1 0 -1 -1 0 0 -1 0 0
-1 0 0 -1 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
-1 0 0 0 0 0 0 -1 -1 0
0 0 0 0 0 0 -1 0 0 0
-1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 -1 -1 0 0 0
0 -1 -1 0 0 0 -1 -1 0 0
0 0 0 0 0 0 0 0 0 0