这样一个要求,还不太好描述,进来看看吧。

ckone123 2009-06-07 06:30:28
N组数,N是预知的,这里仅仅用3组来表示,

A01,A02
B01,B02,B03
C01,C02

要获得这样的一组数:
A01B01C01,
A01B01C02,
A01B02C01,
A01B02C02,
A01B03C01,
A01B03C02,
A02B01C01,
A02B01C02,
A02B02C01,
A02B02C02,
A02B03C01,
A02B03C02,

实际上就是嵌套循环的结果,
for a = 0 to 2

for b = 0 to 3

for c = 0 to 2

next

next

next

现在不知怎么才能实现,没个思路,唉!
...全文
102 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
ckone123 2009-06-09
  • 打赏
  • 举报
回复
gingerkang 2009-06-09
  • 打赏
  • 举报
回复
本人已晕,以下代码只做参考:

<%
Dim a(3)
a(0)=Array("A01","A02")
a(1)=Array("B01","B02","B03")
a(2)=Array("C01","C02")
a(3)=Array("XDD01","XDD02","XDD03")
Function result(a)
Dim i,j,evalstr,m,t
ReDim t(UBound(a))
For i=0 To UBound(t)
t(i)="i"& i
next
m=1
For i=0 To UBound(a)
m=m*(UBound(a(i))+1)
Next
m=m-1
evalstr="dim r("& m &")" & vbcrlf
evalstr=evalstr &"m=0" &vbcrlf
For i=0 To UBound(a)
evalstr=evalstr & "for "& t(i) &"=0 to ubound(a("& i &"))" & vbcrlf
Next
evalstr=evalstr&"r(m)="""""
For i=0 To UBound(a)
evalstr=evalstr&"&a("& i &")("& t(i) &")"
Next
evalstr=evalstr&":m=m+1"& vbcrlf
For i=0 To UBound(a)
evalstr=evalstr & "next" & vbcrlf
Next
execute(evalstr)
result=r
End Function

response.write "<pre>"
response.write Join(result(a),vbcrlf)
response.write "</pre>"%>

ckone123 2009-06-09
  • 打赏
  • 举报
回复
sky521125 2009-06-08
  • 打赏
  • 举报
回复
学习
ckone123 2009-06-08
  • 打赏
  • 举报
回复
顶一下
ckone123 2009-06-08
  • 打赏
  • 举报
回复
运行出错了呀。
ckone123 2009-06-08
  • 打赏
  • 举报
回复
我找到了个C#的代码,似乎可以解决这个问题,不过我不懂C#,有谁能帮我看看并改成ASP的吗?

struct Matrix
{
private string[] element;
public string[] Element
{
get { return element == null ? new string[0] : element; }
set { element = value; }
}
public Matrix(string[] s)
{
element = s;
}
public Matrix Multiply(Matrix m)
{
string[] s = new string[this.element.Length * m.element.Length];
int index = 0;
for (int i = 0; i < this.element.Length; i++)
{
for (int j = 0; j < m.element.Length; j++)
{
s[index] = this.element[i] + "," + m.element[j];
index++;
}
}
return new Matrix(s);
}
}
public static void PrintResult(params string[][] arrays)
{
Matrix m = new Matrix();
foreach (string[] array in arrays)
{
if (m.Element.Length == 0)
m = new Matrix(array);
else
m = m.Multiply(new Matrix(array));
}
foreach (string s in m.Element)
Console.WriteLine(s);
}
static void Main(string[] args)
{
string[] s1 = { "红色", "蓝色", "白色" };
string[] s2 = { "大", "中", "小" };
string[] s3 = { "10克", "20克", "30克" };
PrintResult(s1);
Console.WriteLine("--------------------------");
PrintResult(s1, s2);
Console.WriteLine("--------------------------");
PrintResult(s1, s2, s3);

}
/*
输出:
红色
蓝色
白色
--------------------------
红色,大
红色,中
红色,小
蓝色,大
蓝色,中
蓝色,小
白色,大
白色,中
白色,小
--------------------------
红色,大,10克
红色,大,20克
红色,大,30克
红色,中,10克
红色,中,20克
红色,中,30克
红色,小,10克
红色,小,20克
红色,小,30克
蓝色,大,10克
蓝色,大,20克
蓝色,大,30克
蓝色,中,10克
蓝色,中,20克
蓝色,中,30克
蓝色,小,10克
蓝色,小,20克
蓝色,小,30克
白色,大,10克
白色,大,20克
白色,大,30克
白色,中,10克
白色,中,20克
白色,中,30克
白色,小,10克
白色,小,20克
白色,小,30克
*/
ckone123 2009-06-08
  • 打赏
  • 举报
回复
程序逻辑目前只能这样子设计了,没法子。
另外假设这就是数组,那该如何得到我想要的结果呢?

A01,A02
B01,B02,B03
C01,C02
  • 打赏
  • 举报
回复
感觉你在程序的逻辑上设计应该出了问题
要么你就设计成二维数组的
ckone123 2009-06-08
  • 打赏
  • 举报
回复
继续请教
zpzk123 2009-06-08
  • 打赏
  • 举报
回复
我给你写个完整代码吧,不管你有多少组数据都不怕,加入这个function运行一下就OK:可以算得上一篇高级for 循环教程吧,呵呵

<%
function formatd(n1,n2,n3)
dim zdata,ndata,zt,ztt
ndate=""
zt=0
ztt=0

nm=n1&"<br>"&n2&"<br>"&n3
nm=split(nm,"<br>")
for i=0 to ubound(nm)'处理n个字符串,变成n个数组
nz(i)=split(nm(i),",")


if ztt=0 then'判断是不是第一次循环,如果是,直接给zdate(zt)赋值
zt=0
else
zz=zt
zt=0
end if

for m= 0 to ubound(nz(i))

if zz=0 then
zt=zt+1
zdate(zt)=nz(i)(m)
mdate(zt)=zdate(zt)
else
for mz=1 to zz
zt=zt+1
zdate(zt)=mdate(zz)&nz(i)(m)
mdate(zt)=zdate(zt)
next
end if

ztt=1

next

next

for mzt=1 to zt
ndate=ndate&","&mdate(mzt)
next

formatd=ndate

end function


n(1)="A01,A02"
n(2)="B01,B02,B03"
n(3)="C01,C02"
n=3
response.write(formatd(n1,n2,n3))
%>
ckone123 2009-06-08
  • 打赏
  • 举报
回复
呵呵,的确是有用户填的地方,正如你所说,那样的确也没任何问题。但现在由于涉及一些特别的自动完成的功能,所以才会有这样的要求。
cuimcgrady 2009-06-08
  • 打赏
  • 举报
回复
说点无关的,我觉得这个东西不是用户填的选项么,没填一个 你就记录一个值 这样不就能知道N值了么?
ckone123 2009-06-08
  • 打赏
  • 举报
回复
帮忙呀各位!谢谢了!
a358037801 2009-06-07
  • 打赏
  • 举报
回复
我晕了
讨厌循环
转的我头晕的
ckone123 2009-06-07
  • 打赏
  • 举报
回复
11楼的老兄好像没理解我的意思吧,看10楼说明
郭大侠_ 2009-06-07
  • 打赏
  • 举报
回复
如此easy都6楼了还没搞定.
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%> 
<%
dim strA,strB,strC
strA="A01,A02"
strB="B01,B02,B03"
strC="C01,C02"

dim arrA,arrB,arrC
arrA=Split(strA,",")
arrB=Split(strB,",")
arrC=Split(strC,",")

dim i,j,k
for i=0 to UBound(arrA)
for j=0 to UBound(arrB)
for k=0 to UBound(arrC)
response.write (arrA(i) & arrB(j) & arrC(k) & ",<br/>")
Next
Next
Next
%>
ckone123 2009-06-07
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 lzp4881 的回复:]
引用 5 楼 ckone123 的回复:
可是N是动态的呀,可能是3,可能是4,或者其他数字,3楼的是固定3的代码,怎么做到动态的也可以呢?我就是这个不知道呀。


动态的是一个道理啊,你只要把取得的字符串,用split转成数组就行了
[/Quote]

我是说循环的层次不是固定的,比如你示例代码里的i,j,k,这是3层嵌套循环吧,但我不知道要嵌套几层呀!
lzp4881 2009-06-07
  • 打赏
  • 举报
回复
你是说行数是动态的?我理解成列了
ckone123 2009-06-07
  • 打赏
  • 举报
回复
想了下,还是不行。数据库虽然可以解决问题,但是这个功能可能会频繁用到,那样频繁地建表删表,资源占用太大了。不知有没有更直接的解决方法?
加载更多回复(7)

28,406

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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