使用随机值填充数组

时间:2015-03-25 13:12:53

标签: javascript arrays processing

我有两个1D数组,我想在Processing中用10个独特的随机x,y值填充它们。

例如:

x  y 
-  -
3, 9
2, 4
6, 2
7, 5

我的阵列是:

表1 表示X值和

Y值的

表2

我的问题是,如果数字3,9已存在,我不希望9,3存储在数组中。

我可以识别x,y值(或y,x)何时已经存在,但是一旦我替换它,我就无法检查先前索引中是否存在 new 生成的随机数。

这是我到目前为止所尝试的。但是,如果存在3个值,则数组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;
   }   

任何想法如何控制?

3 个答案:

答案 0 :(得分:2)

我只能想到实现它的两种方法,没有一种是理想的。

  • 检查您生成的数字是否已经存在,如果是这样的话,请生成其他人,直到获得唯一的组合。由于它是随机的,因此它可能是昂贵的,因为它是随机的,如果你非常倒霉,你甚至可能无限循环......
  • 创建一个包含所有可能组合的数组。然后,不是生成随机数,而是生成一个随机索引到这个数组中([0; array.length [)中的一个整数)。在那之后,你必须从数组中删除选择的组合(这样它就不能用于下一个循环),以及它的反转(如果你选择了(9; 3),你必须删除(9; 3)AND(3; 9))。

答案 1 :(得分:1)

我有这个可能对你有用的代码,

首先声明你的数组:

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,它们是对主阵列的引用;

答案 2 :(得分:-1)

我认为没有其他选择可以再次走到整个数组,检查它们是否包含新生成的值。