我有一个二维数组10x10,我需要知道在20个随机单元格中放置20(-1)s的方法。 那是我的阵列:
private int[][] array = new int[10][10];
答案 0 :(得分:2)
伪代码:
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.
答案 1 :(得分:1)
方法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;
}
}
答案 2 :(得分:1)
List
,它将代表二维数组中的元素。 -1
。 Collections.shuffle
可能会有所帮助)(现在-1位于随机位置,您知道其中有20个)-1
放回二维数组。例如,如果-1
位于23
位置-1
位于[2][3]
的数组中,/10
和%10
可能会对此有所帮助。 答案 3 :(得分:0)
本文讨论如何在任意两个边界之间获取随机数: Java Random number between -100 and 100
2D数组的合法数组索引介于0到9之间。
因此,获取0到9之间的随机数,两次,并将其用于数组索引。您可以两次获得相同的集合,因此您可能需要跟踪已经选择的指标,或者如果(thatelement == -1)
为真,则它已经设置,所以再次进行。< / p>
要使用-1
填充所有元素,您可以使用(pre-7)System.arraycopy(o,i,o,i,i)
或(7&amp; 8)Arrays.copyOfRange(i[],i,i)
。
答案 4 :(得分:0)
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