Rumah  >  Soal Jawab  >  teks badan

javascript - js melintasi tatasusunan dua dimensi untuk mendapatkan nombor rawak Bagaimana untuk mencapai nombor rawak purata?

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中文网2663 hari yang lalu1477

membalas semua(2)saya akan balas

  • 伊谢尔伦

    伊谢尔伦2017-07-05 11:09:26

    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.

    balas
    0
  • 天蓬老师

    天蓬老师2017-07-05 11:09:26

    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]
      ]
    }

    balas
    0
  • Batalbalas