Random ColdFusion-生成随机文本(ID)答案列表

Random ColdFusion-生成随机文本(ID)答案列表,random,coldfusion,cfloop,Random,Coldfusion,Cfloop,我正在尝试创建随机测试答案。 使用一个唯一的ID(文本)-当我使用它时,下面只随机列表一次。 若我重新加载页面,它不会再次随机化 此外,如果它是一个只有两个选择的真假答案。它不起作用 各位有什么想法吗?或者有没有更简单的方法。我知道我可以轻松地使用数字,但我更喜欢文本中的唯一答案ID) -只工作一次 -不起作用 #新名单# 重新加载后,它不会重新随机化列表的原因是结构没有排序。最好使用数组甚至java哈希表。如果我理解正确,您只是试图获取一个列表,并输出该列表的重新排序版本?以前可能有人用比这更

我正在尝试创建随机测试答案。 使用一个唯一的ID(文本)-当我使用它时,下面只随机列表一次。 若我重新加载页面,它不会再次随机化

此外,如果它是一个只有两个选择的真假答案。它不起作用

各位有什么想法吗?或者有没有更简单的方法。我知道我可以轻松地使用数字,但我更喜欢文本中的唯一答案ID)

-只工作一次
-不起作用
#新名单#

重新加载后,它不会重新随机化列表的原因是结构没有排序。最好使用数组甚至java哈希表。如果我理解正确,您只是试图获取一个列表,并输出该列表的重新排序版本?以前可能有人用比这更简单的形式回答了这个问题,但如果我正确理解了您的要求,这里有一种方法:

<cfset strList = "rttt,ddde,ffss,gggd" />

<cfset newlist = "">
<cfloop condition="ListLen(strList)">
    <cfset intIndex = RandRange( 1, ListLen( strList ) ) />
    <cfset newlist = ListAppend(newlist, ListGetAt(strList, intIndex))>
    <cfset strList = ListDeleteAt(strList, intIndex)>
</cfloop>

<cfoutput>#newlist#</cfoutput>

#新名单#

如果希望返回随机答案列表,可以使用Java集合与ColdFusion列表交互(将列表转换为数组后)


//我们的原始答案列表。
strlist1=“rttt、ddde、ffss、gggd”;
//将列表转换为数组。
answerArray1=列表阵列(strList1);
//创建Java集合对象。
C=CreateObject(“java”、“java.util.Collections”);
//Java shuffle()是我们的数组。
C.洗牌(回答1);
//输出洗牌数组(作为数组)。
书面答复(答复3);
//或者将其转换为输出列表。
随机应答列表=数组列表(应答数组3);
写输出(随机应答列表);

因为您使用的是小列表,所以Java的
shuffle()
应该非常快。对于大型列表,我相信这比构建随机函数来洗牌列表效率要低得多。这是因为ColdFusion数组自动也是Java数组。CF在Java中工作得非常好,特别是对于这些类型的操作

注1:Java
shuffle()
直接对其输入数组进行操作,因此实际上您正在更改数组本身


注2:根据您想对列表执行的操作,将洗牌答案留在数组对象中并使用它可能会更容易。另外,Java
Collection.shuffle()
将与结构一起使用。您是否根据查询生成答案列表?这仍然有效,但取决于您以后如何使用查询,您可能不想直接在查询对象上使用
shuffle()

您能给出一个所需输出的示例吗?另外,在进行变量管理时,可能需要使用cfscript语法。我不清楚您的意图。结果应该是什么样的?
newlist
应该是一个随机的
strList
列表吗?对于你的两个选择:你仍然期望4个“答案”还是只有2个“答案”?Alex-我只是在下一个变量中使用了newlist。它和斯特利斯特一样。至于我在做什么。它似乎起作用了。但是当我重新加载页面时,它不会改变任何事情。所以,它似乎混淆了一次,这是我想要的。但在重新加载时,它不会再这样做。让我觉得这不太对。如果只有两个变量,比如真/假。。。它不起作用。但是我将尝试这方面的工作。因此,这适用于2个答案(真/假)、3个答案(A、B、C)或4个答案(A、B、C、D):但它似乎只混合一次,并在重新加载时保持相同的结果。ListLen很容易修复答案数:然后更改cfloop,现在将适用于任何ListLen。2,3,4,5,6答案..如果您的任何答案中有逗号,那么这将导致问题。为了解决这个问题,您可以在5个列表函数中添加一种不同的方法来划分答案(比如可能有三个管道“| | |”)!所有问题都是随机的。答案不包含在UniqueID中,因此没有问题。随机化后填充它们。
<cfset strList = "rttt,ddde,ffss,gggd" />

<cfset newlist = "">
<cfloop condition="ListLen(strList)">
    <cfset intIndex = RandRange( 1, ListLen( strList ) ) />
    <cfset newlist = ListAppend(newlist, ListGetAt(strList, intIndex))>
    <cfset strList = ListDeleteAt(strList, intIndex)>
</cfloop>

<cfoutput>#newlist#</cfoutput>
<cfscript>
  // Our original answer list.
  strlist1 = "rttt,ddde,ffss,gggd" ;

  // Convert our lists to arrays. 
  answerArray1 = ListToArray(strList1) ;

  // Create the Java Collection object. 
  C = CreateObject( "java", "java.util.Collections" ) ;

  // Java shuffle() our array.
  C.shuffle(answerArray1) ;

  // Output our shuffled array (as an array).
  writeDump(answerArray3) ;
  // Or convert it to a list for output.
  randomAnswerList = ArrayToList(answerArray3) ;
  writeoutput(randomAnswerList) ;
</cfscript>