| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1109 人关注过本帖
标题:查找在随机数位置怎么处理,帮我看下错在哪里
只看楼主 加入收藏
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
确实不应有重复的随机数。
Set Talk Off
Clear
Input"请输入一个数:" To N
F=.T.
CREATE CURSOR t1 (n1 int)
Dimension a(10)
?"随机数为:"
For i=1 To 10
    DO whil .t.
        n2=Int(Rand()*10+1)
        SELECT t1
        LOCATE FOR n1=n2
        IF NOT FOUND()
            INSERT INTO t1 (n1) VALUES (n2)
            a(i)=n2
            EXIT
        ENDIF
    ENDDO
    ??a(i)
NEXT
USE IN t1

For i=1 To 10
    If a(i)=N
        F=.F.
        ?"位置是:",i
        Exit
    Endif
Next
If F=.T.
    ?"未出现"
Endif
2013-04-12 14:29
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
程序代码:
CLEAR
DIMENSION gaData[1]
Create_Array(@gaData, 10)
Show_Data(@gaData)
INPUT "请输入一个整数: " TO gnValue
gnIndex = Is_Container(@gaData, gnValue)
? IIF(gnIndex != 0, gnIndex, "找不到")
RETURN

*-----------------------------
* 功能:创建一个指定元素数目的一维数组
* 参数:taData   -- 引用方式传入的数组,在函数内部分配空间并返回给调用者
*       tnNumber -- 数组元素的数目
*       tnMin    -- 随机数的最小值(若省略则为0)
*       tnMax    -- 随机数的最大值(若省略则为99)
*-----------------------------
PROCEDURE Create_Array(taData, tnNumber, tnMin, tnMax)

    DIMENSION taData[tnNumber]
   
    IF PCOUNT() < 3
        tnMin = 0
        tnMax = 99
    ENDIF
   
    LOCAL lnIndex
    lnIndex = 1
    DO WHILE lnIndex <= ALEN(taData, 1)
        taData[lnIndex] = INT((tnMax - tnMin + 1) * RAND()) + tnMin
        IF Is_Container(@taData, taData[lnIndex]) != 0    && 检查数据是否有重复
            lnIndex = lnIndex + 1
        ENDIF
    ENDDO
   
ENDPROC 

*-----------------------------
* 输出数组的内容
*-----------------------------
PROCEDURE Show_Data(taData)
    LOCAL lnIndex
   
    FOR lnIndex = 1 TO ALEN(taData, 1)
        ? lnIndex, taData[lnIndex]
    NEXT
    ?
   
ENDPROC 

*-----------------------------
* 功能:检查在数组中是否包含有指定数据
* 参数:taData  -- 引用方式传入的数组
*       tnValue -- 需要查找的数据
* 返回:若数据已存在则返回在数组中的下标,否则返回零
*-----------------------------
FUNCTION Is_Container(taData, tnValue)
    LOCAL lnIndex, llFound
   
    llFound = .F.
    FOR lnIndex = 1 TO ALEN(taData, 1)
        IF VARTYPE(taData[lnIndex]) == "N"    && 应确保数组中的数据是数值型,因为VFP创建的数组元素默认值为.F.
            IF taData[lnIndex] == tnValue
                llFound = .T.
                EXIT
            ENDIF
        ENDIF
    NEXT
   
    RETURN IIF(llFound, lnIndex, 0)
   
ENDFUNC

授人以渔,不授人以鱼。
2013-04-12 15:23
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
楼主,知道为什么操作类型不匹配吗?你在循环中赋值的时候,只赋给了一个值:a(n),也就是说,整个数组只有最后一个元素是有数值的,其它元素全是逻辑值.F.(VFP的默认值)。当你对比时,第1个元素就发生逻辑值和数值对比的情况,能不报错吗?
2013-04-12 16:46
me_mou
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-4-12
收藏
得分:0 
回复 10楼 TonyDeng
上面那个方法确实会出现所有数字都一样
还有我有个问题
比如
for XX to XXXX
  if XXXX
   exit
  endif
end for

上面这种情况,exit的要表达的意思是跳出 if选择 还是要跳出 for循环
2013-04-12 17:17
me_mou
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2013-4-12
收藏
得分:0 
回复 13楼 taifu945
谢谢指导,是不是在循环赋值的时候 我只赋值了给a(n) 而a(i)和其他的都是只是.T.
2013-04-12 17:23
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
建议楼主看看有关数组方面的基础知识,只有真正掌握了数组方面的知识,才能在编程中运用自如。

坚守VFP最后的阵地
2013-04-12 17:47
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 14楼 me_mou
跳出for循环

授人以渔,不授人以鱼。
2013-04-12 21:28
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用me_mou在2013-4-12 17:23:53的发言:

谢谢指导,是不是在循环赋值的时候 我只赋值了给a(n) 而a(i)和其他的都是只是.T.
是滴,你循环中应该是写“a(i)”而不是“a(n)”。n是个固定值,你在循环里再怎么环也只给它一个元素赋值了。另外,数组定义后的默认值是.F.,而不是.T.。
2013-04-12 21:40
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
程序代码:
DIMENSION A(10)
FOR I=1 TO ALEN(A)
    ?I,A(I)
ENDFOR

运行这段代码,看下A(1)...A(10)的初始值

坚守VFP最后的阵地
2013-04-12 21:49
快速回复:查找在随机数位置怎么处理,帮我看下错在哪里
数据加载中...
 
   



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

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