为了账号安全,请及时绑定邮箱和手机立即绑定

这段代码到底哪里出错了??

这段代码到底哪里出错了??

qq_0_39 2017-08-22 22:23:15
function getRandRow(){ var arr=[]; for(var i=0;i<28;i++){ arr[i]=i; } var len=28; var r=0; for(var i=0;i<20;i++){ r=Math.floor(Math.random()*len);//随机索引 arr[len-1]=arr[len-1]+arr[r]; //随机索引与最大索引交换 arr[r]=arr[len-1]-arr[r];  arr[len-1]=arr[len-1]-arr[r]; len--; //最大索引自减 } return arr; } console.log(getRandRow());运行结果: 为什么会出现这么多的0 ????我的需求是 0-27 随机取出19个不重复的数 , 但是这段代码为什么会出现BUG??? 我快疯了
查看完整描述

1 回答

已采纳
?
信者得救

TA贡献22条经验 获得超10个赞

错误的地方在于一种情况。就是len-1刚好等于r时。例如len-1=27,r刚好又是27时

            arr[len-1]=arr[len-1]+arr[r]; //arr[27]=arr[27]+arr[27]

            arr[r]=arr[len-1]-arr[r]; //arr[27]=arr[27]-arr[27],此时就会等于0了。

            arr[len-1]=arr[len-1]-arr[r];//arr[27]=arr[27]-arr[27]

解决办法:声明一个变量作为介质来传参。

            var abc=arr[r];

            arr[r]=arr[len-1];

            arr[len-1]=abc;


查看完整回答
反对 回复 2017-08-23
  • qq_0_39
    qq_0_39
    len-1=27; r=27; 相加后arr[len-1]是54了
  • 信者得救
    信者得救
    是等于54,然后arr[27]= arr[27]-arr[27];即arr[27]=54-54=0
  • qq_0_39
    qq_0_39
    绕进去了 , 看来只能用临时变量了
?
慕瓜9220888

TA贡献868条经验 获得超0个赞

MMOAZZMZS

IXFRNANIB

WUJBUBYVI

DSEMYLYXK

HSXQFIVCM

UWGMFTNUO

YXZFPMAUR

PXTTZDAYL

RCIFUFFTN

LSIEDHLSJ

OOYUTDRFX

AYCLBVVTI

YXDCSIGUE

TBFEUIMJD

HWZFLYJNA

QZFUXBVCG

AQDXDOICG

FBQCEYVOB

HSEQCFSVM

IWVKJPZSP

CASYKHAHS

HBNGBOIYY

ECRDZCPMG

NFHMYVIOY

BZYKFPCCC

WZBKXYVOB

WEJJERLAD

QDYHTWJWP

EFRNSPSCS

OFRDHHNAK

XXXGCGAEO

KWCVLYSQK

YTSFLYCGD

KIYEKXRFJ

YZZOYOZAA

LKODTDXVU

RGUAGQAWG

XWIYORVTT

OMCCILWDR

GMXNZJNLM

HJHDCWKYB

CBXDMAKRD

IATOBPMTS

EWMYYSZDA

UPBYOBNKX

IWIUGQMWP

VAMGCZZFI

TVFQTPJPR

BDSVREUHK

WAJLYPJWP

PGMQSBOVS

RSDCWWJCZ

EWOTFCMZI

GBTIXKXEB

OZSYQTDAN

WDVODQNGD

UIWWGKEHN

ZRAVILLYL

RMRKMIYYS

OWRXWWFNQ

MTPLNGZGZ

MRMOHQLSZ

SQRDFVOLI

UYKCOOERE

LMYRHYOZZ

OFCEAGGJD

QRDNGSMZC

QEGCRRHUU

NBXWHBYUB

DMSEDWJAT

AEQPVRLIR

UJEQTMCMP

OPYNUBHZW

CWYHJZCMF

DEUAMZCIC

UIKMLPSJX

BGSDMJSWV

OSOACFKXQ

XIHZLYVIF

VDIBGQQWQ

DHIOEFSSP

LKJMCGSFG

ONZLLDXRF

MBXWUOIMD

KZPYOSWAR

ATIBYVZNR

DYYXXRVCG

QSXNDNBVS

IJZPLICQH

NVVETTHBF

DCIHDBVSD

ALVUKOOSU

XRWOAXGDQ

JUABEBFTN

SHNZFYIEI

QENACWWPG

QEODMJWTW

PRLNQCPWZ

WMVODQATA

EFKGFYEEJ

XEAWYLQJQ

LKSEHNQJQ

PYHTVZGWI

NBXTCSWAQ

RPBACIMFD

QEGSUHBXT

UZPVPDOEB

PYBZGKICG

RSSEKEYMJ

TFGMMQGEM

BDZSYLZGC

IUTPFDXUI

FKAWVMQWG

BDJIOSGQU

GBHSSCQDR

DLKUKXESC

OAQGPLPGQ

IKRBHLFEV

KMUQWQKUZ

AAAWCGAND

MRHNDNHLT

DPBRQRVFJ

NYEEURVSW

NSBZCWEMT

MHDPRUKNU

YJLXJSPWF

OXJODAQDQ

USZOQAQNX

YEKREYJUY

ZSWVMOZMX

DIIURDNYS

PFHDGKHXR

KWPDUEANS

UWLBROAEY

SAUUUOBZD

DJGWLFZWK

ZANTVQLPW

RDZFICWKE

JVBRAUYWY

FQRNBFVTX

AJPYOSCGD

QSOSRYCTF

UWCYXESRD

WRSZJWHBC

IGAWLFDHB

BWMVVPLIT

NOKAWUYSH

XSOOAYKHF

YKSIXLZDX

RPJHHBVSN

HJFRXDXLY

BTRQZDHMG

DFRNGKUOF

QYAGZNHUI

EMSSBDXEI

VUAJZMSWA

XJFFEPAUU

EJPVLPSMA

IJZDADOSM

QSOQWQUSF

LRQGMGKOV

ARETFVVSI

VXYKQEYLM

STLXJMCGA

VTCEKUQKQ

KYATYVYBY

JUGAFKURN

WXQEYCFIF

IJNCVYYYO

RAMSKKXRE

RWIAMPGZM

CNQNWCPSF

QVXGIFDQN

VHDDCSFAD

WKMOAAATA

YZEGRXKHE

QHJVHKXKH

WYUAFSSPL

JHRUWZSPI

MKWJRLILH

查看完整回答
反对 回复 2021-10-20
  • 1 回答
  • 0 关注
  • 1770 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信