以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  测试无反应  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=78695)

--  作者:3232121table
--  发布时间:2015/12/15 10:20:00
--  测试无反应

老师们好,请问我测试如下代码为何会无反应呢:

 

随机抽取表中40条[选项]为false 的记录并把它设为true,当表中只剩下40条[选项]为false 的记录时,此时执行程序会稳死那,只能强迫

关闭重程序了。

 

Dim lst As new List(of Integer)
        Dim y2 As Integer=0
        Dim dr As DataRow
        Dim b As Integer
        Dim drs As List (Of DataRow) = DataTables("表APA").Select("[选择] = false and [类型]=\'A\'")
        b=drs.Count    
        Do
            Dim idx As Integer = rand.Next(0,b-1)
            dr = drs(idx)
            n1=dr("序号")
            If lst.Contains(n1)=False Then
                dr("选择")=True
                lst.add(n1)
                y2=y2+1
            End If
        Loop While y2<40


--  作者:大红袍
--  发布时间:2015/12/15 10:22:00
--  

抽取越接近总体,就不能用这种方法。

 

你有洗牌的方式吧

 

http://www.foxtable.com/bbs/dispbbs.asp?BoardID=2&ID=68314&skin=0

 


--  作者:大红袍
--  发布时间:2015/12/15 10:24:00
--  
再者,有可能你的drs.count根本就不够40个,导致一直循环。
--  作者:3232121table
--  发布时间:2015/12/15 11:03:00
--  
以下是引用大红袍在2015/12/15 10:24:00的发言:
再者,有可能你的drs.count根本就不够40个,导致一直循环。

41个就可以,40就不行。

 

谢谢老师!


--  作者:大红袍
--  发布时间:2015/12/15 11:07:00
--  

 

  Dim idx As Integer = rand.Next(0,b-1)

 

改成

 

  Dim idx As Integer = rand.Next(0,b)


--  作者:3232121table
--  发布时间:2015/12/15 12:45:00
--  y这样。。。

 

谢谢老师