使用CF中的循环列表创建组合

时间:2017-03-11 18:53:48

标签: loops coldfusion

我在stackoverflow上得到了很多帮助,我非常感谢。我似乎被困在正确编码这个列表循环。我知道有很多简单的方法来编写这个项目,但我的学生项目要求我通过URL传递变量。我试图简单地组合我通过URL传递的密码,以创建具有六个值(cold,fusion,dynamic and bert, ernie, oscar)的所有密码组合。我已将问题隔离到我的List Loop。你们能告诉我在这里失踪了吗?提前谢谢。

错误消息:

  

投射类型的对象时出错   coldfusion.compiler.ASTstructureReference无法强制转换为   java.lang.String为不兼容的类型。

     

这通常表示a   Java编程错误,虽然它也可能意味着你已经尝试过   以与设计不同的方式使用异物。

passwords.cfm:

<cfinclude template="header.cfm">
<body>

<h2>Loop List</h2>

<a href="looplist.cfm?List1=cold,fusion,dynamic&List2=bert,ernie,oscar"> 
Click here for all password combinations</a>

<cfinclude template="footer.cfm">

looplist.cfm:

<cfinclude template="header.cfm">

<h2>Loop List</h2>

<cfloop Index = "#URL.List1#" List = "#URL.List2#">
    <cfloop Index = "#URL.List2#" List = "#URL.List1#">
    </cfloop>
</cfloop>

<cfset passwordList= #URL.List1# & #URL.List2#>

<UL><cfoutput>#passwordList#</cfoutput><UL><BR>

<cfinclude template="footer.cfm">

2 个答案:

答案 0 :(得分:2)

  
    

<cfloop Index = "#URL.List1#" ...>

  

“index”应该是一个包含变量的 name 的简单字符串,例如“MyVariable”。围绕URL.List1的英镑符号强制要求评估该变量。所以你实际上传递了它的作为名称,即"cold,fusion,dynamic"。由于那不是valid variable name,这就是导致您看到的神秘编译错误的原因。

鉴于这是家庭作业,我不打算为你编写代码,而是提供一个你可以构建的例子。就像我在the comments of your other thread

中建议的那样
  • 简单地开始。为了简化操作,您可以暂时对URL参数进行硬编码。经常使用cfdumpcfoutput来显示不同点的变量,以便更好地了解代码的作用。

  • 不要将List1用于循环“index”和url变量。使用两个不同的变量名称。

简化示例:

<!--- Hard code values for testing ONLY --->
<cfset URL.List1 = "cold,fusion,dynamic">
<cfset URL.List2 = "bert,ernie,oscar">

<cfloop List="#URL.List2#" index="OuterValue">
    <!--- Display current element in outer loop for debugging only --->
    <cfoutput>
        <h3>OUTER LOOP: Current element from URL.List2 is:  #OuterValue#</h3>
    </cfoutput>

    <cfloop List = "#URL.List1#" index="InnerValue">
        <!--- Display current element in inner loop for debugging only --->
        <cfoutput>
            INNER LOOP: Current value from URL.List1 is: #InnerValue#<br>
        </cfoutput>

         <!--- 
            ... real code that does something with the two variables here .... 
         --->
    </cfloop>
</cfloop>

答案 1 :(得分:0)

以空密码列表开头。

然后你有了外部循环(索引i),从中取出组合单词的左侧。

从内循环(索引j)中取出组合单词的右侧。此外(内部循环),您构建第二个组合(切换右侧和左侧单词),然后将两个组合添加到“密码列表”。

  <cfset passwordList = "" />

  <cfloop index="i" list="#URL.List1#">

    <cfset tempPasswordCombo1 = "" />
    <cfset tempPasswordCombo2 = "" />

    <cfloop index="j" list="#URL.List2#">
      <cfset tempPasswordCombo1 = i & j />
      <cfset tempPasswordCombo2 = j & i />      
      <cfset passwordList = listAppend(passwordList, tempPasswordCombo1) />
      <cfset passwordList = listAppend(passwordList, tempPasswordCombo2) />
    </cfloop>

  </cfloop>


  <cfoutput>#passwordList#</cfoutput>