| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 960 人关注过本帖
标题:回复下标超界怎么回事?
只看楼主 加入收藏
jinanshui
Rank: 2
等 级:论坛游民
帖 子:295
专家分:67
注 册:2009-10-6
结帖率:93.88%
收藏
已结贴  问题点数:20 回复次数:17 
回复下标超界怎么回事?
thisform.List1.clear
DIMENSION c(77,5)
DIMENSION m(1,10)
m(1,1)=35
FOR i=1 TO 77
FOR k=1 TO 35
thisform.List1.additem(ALLTRIM(STR(k,2)))
ENDFOR
FOR j=1 TO 5
c(i,j)= INT(m(1,1)*RAND()+1)
thisform.List1.RemoveListItem(c(i,j))
m(1,1)=m(1,1)-1
ENDFOR
thisform.list1.clear   
ENDFOR
thisform.timer1.Enabled=.F.


thisform.List1.RemoveListItem(c(i,j))
回复下标超界
怎么回事?

2013-07-11 10:10
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
超过数组下标了
2013-07-11 10:27
jinanshui
Rank: 2
等 级:论坛游民
帖 子:295
专家分:67
注 册:2009-10-6
收藏
得分:0 
请版主说的详细一些,我百思不得其解
2013-07-11 10:46
hu9jj
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:红土地
等 级:贵宾
威 望:400
帖 子:11857
专家分:43421
注 册:2006-5-13
收藏
得分:0 
比方说你定义了一个dim a(6)的一维数组,你却对a(7)进行操作,下标就超界了。

活到老,学到老!http://www.(该域名已经被ISP盗卖了)E-mail:hu-jj@
2013-07-11 11:00
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:5 
c(i,j)= INT(m(1,1)*RAND()+1)
数据不唯一,造成了下标超界
removelistitem 方法
从组合框或列表框中移去一项。
语法
Control.RemoveListItem(nItemId)
参数
nItemId
指定一个整数,它表示删除项在控制中的唯一标识。
从上面可以看出,如果一个数据项的唯一标识不存在,也会出现问题
你自己可以用LISTITEMID属性测试

坚守VFP最后的阵地
2013-07-11 11:21
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:5 
thisform.List1.clear
DIMENSION c(77,5)
DIMENSION m(1,10)
m(1,1)=35
FOR i=1 TO 2
    FOR k=1 TO 35
        thisform.List1.additem(ALLTRIM(STR(k,2)))
    ENDFOR
    FOR j=1 TO 5
        c(i,j)= INT(m(1,1)*RAND()+1)
a=c(i,j)
        thisform.List1.RemoveListItem(c(i,j))
        m(1,1)=m(1,1)-1
        ?c(i,j),a
    ENDFOR
    *thisform.list1.clear   
thisform.caption=transform(thisform.list1.listcount)+[,]+transform(c(i,1))
ENDFOR
thisform.timer1.Enabled=.F.
LIST1.CLICK
thisform.caption=transform(thisform.list1.listitemid)
把你的代码换成上面的代码,测试一下,就能看出问题了。

坚守VFP最后的阵地
2013-07-11 11:26
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
认真研究下LIST控件的属性,有助于你解决这个问题。

坚守VFP最后的阵地
2013-07-11 14:16
jinanshui
Rank: 2
等 级:论坛游民
帖 子:295
专家分:67
注 册:2009-10-6
收藏
得分:0 
真难,版主大侠怎么改呢?
2013-07-11 14:47
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9842
专家分:27213
注 册:2012-2-5
收藏
得分:0 
你的程序本身就有问题
m(1,1)=m(1,1)-1 &&有可能为负数
不知楼主这段代码是做什么用的。不说清楚,就不好办了

坚守VFP最后的阵地
2013-07-11 14:56
jinanshui
Rank: 2
等 级:论坛游民
帖 子:295
专家分:67
注 册:2009-10-6
收藏
得分:0 
谢谢,我是模仿VB中的一个程序来取不同的随机数
第一步,给列表框注入1-35共35个整数
第二步 从列表框中循环随机取出5个不同的整数
      原来思路是:FOR j=1 TO 5
m(1,1)=INT(RAND()*thisform.List1.ListCount+1)
c(i,j)=thisform.List1.list(m(1,1))
thisform.List1.removeitem(m(1,1))
ENDFOR
说发现不了变量.
第三步,执行上述步骤若干次
2013-07-11 15:11
快速回复:回复下标超界怎么回事?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024804 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved