[英]How can i add random numbers in an array?
我有一个二维数组10x10,我需要知道将20(-1)放入20个随机单元中的方法。 那就是我的数组:
private int[][] array = new int[10][10];
伪代码:
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.
方法randomHashSet()
为您提供0至99之间的n (20)
数字。然后,您可以使用简单的数学技巧将此一维列表映射到二维数组。
试试这个代码:
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
,它将表示二维数组中的元素。 -1
。 Collections.shuffle
可能会有所帮助)(现在-1位于随机位置,您知道其中有20个) -1
返回二维数组。 例如,如果-1
位于位置23
则将数组中的-1
放置在位置[2][3]
(此处/10
和%10
可能会有所帮助)。 这篇文章讨论如何获取任意两个边界之间的随机数: Java随机数介于-100和100之间
2D数组的有效数组索引在0到9之间。
因此,请获得一个介于零和九之间的随机数,两次,并将其用于数组索引。 您可能会两次获得相同的集合,因此您可能需要跟踪已经选择的索引,或者如果(thatelement == -1)
为true,则它已经被设置,因此请再次执行。
要使用-1
填充所有元素,可以使用(pre-7) System.arraycopy(o,i,o,i,i)
或(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();
}
}
}
输出:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.