2017-03-11 7 views
1

Ich habe eine Menge Hilfe auf Stackoverflow erhalten und ich schätze es sehr. Ich scheine bei der korrekten Programmierung dieser List Loop fest zu stecken. Ich bin mir bewusst, dass es viel einfachere Möglichkeiten gibt, dieses Projekt zu programmieren, aber mein Schülerprojekt ERFORDERT, dass ich Variablen über die URL übergebe. Ich versuche, die Kennwörter, die ich durch die URL passiere, einfach zu kombinieren, um alle verfügbaren Kennwortkombinationen mit sechs Werten zu erstellen (cold,fusion,dynamic and bert, ernie, oscar). Ich habe das Problem in meiner Listenschleife isoliert. Kannst du mir sagen, was ich hier vermisse? Danke im Voraus.Verwenden von Loop-Liste in CF zum Erstellen von Kombinationen

Fehlermeldung:

Fehler ein Objekt vom Typ Gießen coldfusion.compiler.ASTstructureReference kann nicht auf java.lang.String zu einem inkompatiblen Typ umgewandelt werden.

Dies zeigt normalerweise einen Programmierfehler in Java an, obwohl es auch bedeuten könnte, dass Sie versucht haben, ein fremdes Objekt auf eine andere Weise zu verwenden, als es entworfen wurde.

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"> 
+1

Sie "Wiederverwendung" Ihre URL-Variablen as'index'of die Schleife und die Variablen überschreiben ... –

+0

Können Sie erarbeiten, was meinen Sie mit „die Problem"? Ist der Code ein Fehler? Wenn ja, redigieren Sie Ihre Frage, um die eigentliche Fehlermeldung zu erhalten. – Leigh

+0

Ok, also muss ich meine Indexwerte grundsätzlich umbenennen? – Veronica

Antwort

0

Beginnen Sie mit einem leeren Passwort-Liste.

Sie haben dann die äußere Schleife (Index i), von wo Sie die linke Seite des kombinierten Wortes nehmen.

Von der inneren Schleife (Index j) nehmen Sie die rechte Seite des kombinierten Wortes. Auch hier (die innere Schleife) bauen Sie eine zweite Kombination (wechseln Sie die Wörter auf der rechten Seite und auf der linken Seite) und fügen Sie dann die zwei Kombinationen zur "Passwortliste" hinzu.

<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> 
2

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

der "Index" eine einfache Zeichenfolge sein sollte, den Namen einer Variablen, beispielsweise "MyVariable" enthält. Die Nummernzeichen um URL.List1 erzwingen, dass diese Variable ausgewertet wird. Sie geben also seinen Wert als den Namen, dh "cold,fusion,dynamic". Da das kein valid variable name ist, verursacht das den kryptischen Kompilierungsfehler, den Sie sehen.

Da dies Hausaufgaben sind, werde ich nicht den Code für Sie schreiben, sondern ein Beispiel liefern, auf dem Sie aufbauen können. Wie ich in the comments of your other thread

vorgeschlagen
  • Starten Sie einfach. Zur Vereinfachung können Sie die URL-Parameter vorübergehend fest codieren. Verwenden Sie häufig cfdump und cfoutput, um Variablen an verschiedenen Punkten anzuzeigen, um besser zu verstehen, was der Code macht.

  • Verwenden Sie nicht List1 für die Schleife "Index" und URL-Variable. Verwenden Sie zwei verschiedene Variablennamen.

Starter Beispiel:

<!--- 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> 
Verwandte Themen