javascript - js melintasi tatasusunan dua dimensi untuk mendapatkan nombor rawak Bagaimana untuk mencapai nombor rawak purata?
PHP中文网
PHP中文网 2017-07-05 11:07:26
0
2
1507

Terdapat tatasusunan dua dimensi, bagaimana untuk memotongnya (tidak bersebelahan dengan bahagian atas, bawah, kiri, dan kanan) untuk mendapatkan 2 atau 3 nombor rawak?

Susunan:

var a = [
    [0, 1],
    [2, 3],
    [4, 5],
    [6, 7]
];

Saya menulis seperti ini, tetapi ia terasa sangat tegar, nombor yang diperoleh tidak sekata, dan kodnya agak kembung Adakah sesiapa mempunyai penyelesaian yang lebih baik?

function select() {
    var a = [
        [0, 1],
        [2, 3],
        [4, 5],
        [6, 7]
    ];

    var lastSelect = -1;

    for (var i = 0; i < a.length; i++) {

        var index = getRandomNumber(lastSelect, a[i].length);

        console.log(a[i][index]);

        lastSelect = index;
    }

}

function getRandomNumber(lastSelect, max) {

    var random = Math.floor(Math.random() * max);

    if (random == lastSelect) return getRandomNumber(lastSelect, max);

    else return random;

}

select()
PHP中文网
PHP中文网

认证0级讲师

membalas semua(2)
伊谢尔伦

Syaratnya bahagian atas, bawah, kiri dan kanan tidak bersebelahan. Dengan mengandaikan bahawa koordinat titik permulaan ialah (0,0), maka titik berikut (-1, 0), (0, -1), (1, 0), (0, 1) bertopeng. Ciri-ciri titik ini ialah: nilai mutlak x ditambah nilai mutlak y sama dengan 1. Nilai koordinat x dan y secara rawak dalam julat yang munasabah dan tambahkan nilai mutlak setiap satu Jika ia tidak sama dengan 1 dan koordinat ini belum diambil sebelum ini, ia adalah sah.

Peter_Zhu

Berikut ialah idea penggodaman yang sangat mudah tetapi benar-benar memuaskan, iaitu dengan sengaja [mengambil nombor secara bersilang] untuk mencapai keperluan [atas, bawah, kiri dan kanan tidak bersebelahan] Ia hanya memerlukan dua baris:

function pick (arr) {
  // 若数组长度为 5,则该下标 x 的范围为 1~3
  // 直接依次取 a[x - 1], a[x], a[x + 1] 中交错的项即可
  // 为了保证不越界而根据数组长度限制 x 取值范围
  const pickedIndex = Math.max(
    0, parseInt(Math.random() * arr.length - 2)
  ) + 1
  // 第二维下标交错着 0 1 取值,达到数字不相交的需求
  return [
    arr[pickedIndex - 1][0],
    arr[pickedIndex][1],
    arr[pickedIndex + 1][0]
  ]
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan