用随机值填充数组
Fill Arrays with random values
我有两个1D数组,我想在Processing中用10个唯一的随机x,y值填充它们。
例如:
x y
- -
3, 9
2, 4
6, 2
7, 5
我的阵列是:
表1X值和
表2的Y值。
我的问题是,如果数字3,9已经存在,我不希望9,3存储在数组中。
我可以确定x,y值(或y,x)何时已经存在,但一旦我替换它,我就无法检查新生成的随机数是否存在于以前的索引中。
这就是我迄今为止所尝试的。但是,如果存在3个值aldready,数组Table1和Table2将只存储7个值,而不是10个值。
for (int i=0; i<10; i++) {
x=(int)random(6);
y=(int)random(6);
if ((Table1[i] != x && Table2[i] != y) || (Table1[i] != y && Table2[i] != x))
{
Table1[i] = x;
Table2[i] = y;
}
有什么办法控制它吗?
我只能想到两种实现它的方法,没有一种是理想的。
- 检查您生成的数字是否已经存在,如果是这样,请生成其他数字,直到获得唯一的组合。它可能很昂贵,可能性很小,因为它是随机的,如果你很不幸,你甚至可能以无限循环结束
- 创建一个包含所有可能组合的数组。然后,您将不生成随机数,而是向该数组生成一个随机索引([0;array.length[中的一个整数)。之后,您必须从数组中删除选定的组合(这样它就不会用于下一个循环),以及它的倒数(如果您选择(9;3),则必须删除(9;4)and(3;9))
我有这段代码可能会对你有所帮助,
首先声明您的数组:
var a = [];
var b = [];
然后你可以调用一个为你做所有事情的函数
fill(a,b)
这个函数的定义应该是这样的:
function fill(a, b) {
var arr = [];
while(arr.length<10) {
var pair = randomPair();
if (arr.indexOf(pair.join(','))==-1 || arr.indexOf(pair.reverse().join(','))==-1) {
a.push(pair[0]);
b.push(pair[1]);
arr.push(pair.join(','));
}
}
}
则所使用的其他函数的定义为:
function randomPair () {
return [ parseInt(Math.random()*7) , parseInt(Math.random()*7) ]
}
因此,很明显,randomPair函数返回2个值x和y。fill
函数测试该对是否已经存在,是否按正常顺序或相反顺序存在。如果没有,它添加了a和b,它们是对主数组的引用;
我看不到其他选项,可以再次走到整个数组,检查它们是否包含新生成的值。
相关文章:
- 将数据推送到数组填充 jqGrid
- 使用 JSON 数组填充输入字段
- 用Javascript中的JSON数组填充HTML
- 动态生成的表格 - 使用数组填充TD值
- 使用数组填充if语句值
- AngularJS:用两个JSON数组填充复选框列表,最初检查了一个数组中的一些项
- 为什么不是't ng表将数据从数组填充到表中
- 在javascript中用数组填充对象
- 高图表 - 从数组填充数据
- 如何从下拉列表中由可观察数组填充的选定项中检索完整对象
- 使用 JavaScript 数组填充下拉选择框
- Javascript array.length 为 0,但数组填充了 40 个项目
- 使用 JSON 数组填充图表
- 数组填充外部函数 - 不可访问的成员
- 用 javascript 数组填充 struts2 select 标签
- 用服务器数组填充 jquery 数组
- 如何使用 json 数组填充 Rails 下拉菜单
- 在用数组填充初始化的数组上使用数组映射的意外行为
- JavaScript 风格的数组填充在 Java 中
- 如何使用 javascript 数组填充 html 标题