方法嵌套循环,如何一下子跳出所有循环?

xiayule 2005-02-02 04:54:44
function Test(i as integer) as boolean
for k as integer =0 to 10
if object(i)="ddddddd" then
return true
else
test(k)
end if
next
end function
如果在return true之后,如何让他一下返回,而不用一层一层出来?
...全文
646 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xufan_1976 2005-02-04
  • 打赏
  • 举报
回复
楼主的程序其实确实是有问题的
但我觉得他可能是想要一种思路
例子确实选得不好

只要递归时有一个是true就返回true
我觉得我的例子好像没什么问题啊

条件成立后,返回True, 退回上一层循环
此时执行语句
if test(k) then
return true
end if
由于test(k)返回的是True
所以执行if中的return true
返回的还是true,再退回上一层循环
再执行
if test(k) then
return true
end if
以此类推
怎么会像楼主说的“以后的条件都不会成立。所以最终的返回仍然是False.”呢?!
或是楼主的程序确实存在问题呢?!
koomis 2005-02-03
  • 打赏
  • 举报
回复
主程序
sub main
try
test()
catch ex as exception
end try
end sub
function Test(i as integer) as boolean
for k as integer =0 to 10
if object(i)="ddddddd" then
return true
throw new exception("programer break")
else
test(k)
end if
next
end function
xiayule 2005-02-03
  • 打赏
  • 举报
回复
这样好像也不行的
条件成立后,返回True, 退回上一层循环,
以后的条件都不会成立。所以最终的返回仍然是False.
  • 打赏
  • 举报
回复
说实话,看楼主的程序感觉很困惑。
试想,如果第一次调用Test函数时参数i为5(随意但先不假设任意)的话,我们代入一两次来看看会有什么现象:
Test(5);
进入:
function Test(i =5 ) as boolean
for k as integer =0 to 10
if object(i=5)="ddddddd" then
return true '如果object(5)恰巧为"ddddddd"则一次性返回了,结果为TRUE
else
test(k=0) '如果不为"ddddddd",那么K首值为0,代入test.这里是个关键,见下面一段。
end if
next
end function

下面是承接上面的调用k=0,对Test来说即i=0
function Test(i =0 ) as boolean
for k as integer =0 to 10
if object(i=0)="ddddddd" then
return true '如果object(0)恰巧为"ddddddd"则一次性返回了,结果为TRUE
else
test(k=0) '如果很不巧的是object(0)也不为"ddddddd"的话,这时作为新循环的首轮,K仍然为0,而且对于以后将永远重复这个调用,直到内存崩溃也未算出头之日
end if
next
end function

不论是比方还是实例,建立在一个错误的结构上,是不可能讨论如何正确构建流程的。
xufan_1976 2005-02-03
  • 打赏
  • 举报
回复
不好意思,没仔细看程序,呵呵

递归只能一层层退出

不如把程序改成
function Test(i as integer) as boolean
for k as integer =0 to 10
if object(i)="ddddddd" then
return true
elseif test(k) then
return true
end if
next
end function
xiayule 2005-02-03
  • 打赏
  • 举报
回复
是递归啊,所以,如果条件成立的话,只是退出了本层的过程,退回到上一层,上一层执行又返回了不同的值,所以最好得到的值得情况就不再准确。
我现在的做法,是生命一个变量来保存条件成立时的返回值。

不知道有没有其他的方法?
wangminlikeapple 2005-02-03
  • 打赏
  • 举报
回复
一层一层退出是用break;
GX198302 2005-02-03
  • 打赏
  • 举报
回复
你自己的方法很好啊
GX198302 2005-02-03
  • 打赏
  • 举报
回复
goto!? 老大:) 这样也行啊!?
shan1119 2005-02-03
  • 打赏
  • 举报
回复
flag=0
for(i;i<10,flag=1;i++)
flag=1
next
jingwen2004 2005-02-03
  • 打赏
  • 举报
回复
goto
TonyTonyQ 2005-02-02
  • 打赏
  • 举报
回复
楼主的意思,是不是当return的时候,退出整个递归操作?因为这是个自身调用的函数。

递归的话,只能一层层退出。
xufan_1976 2005-02-02
  • 打赏
  • 举报
回复
return就是返回,整个函数都退出了,循环当然也就退出了
simanh 2005-02-02
  • 打赏
  • 举报
回复
是啊,都return了
ofei 2005-02-02
  • 打赏
  • 举报
回复
楼上正解

return之后的语句将得不到执行,此时也就退出所有循环了
3tzjq 2005-02-02
  • 打赏
  • 举报
回复
当执行到return true时会自动结束所有的循环,所以不必先退出循环后再返回值。

16,555

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧