[LON-CAPA-cvs] cvs: loncom /homework radiobuttonresponse.pm

albertel lon-capa-cvs@mail.lon-capa.org
Fri, 16 May 2003 19:25:08 -0000


albertel		Fri May 16 15:25:08 2003 EDT

  Modified files:              
    /loncom/homework	radiobuttonresponse.pm 
  Log:
  - Fixes BUG#1439 for rbr
  
  
Index: loncom/homework/radiobuttonresponse.pm
diff -u loncom/homework/radiobuttonresponse.pm:1.70 loncom/homework/radiobuttonresponse.pm:1.71
--- loncom/homework/radiobuttonresponse.pm:1.70	Fri Apr 18 13:10:08 2003
+++ loncom/homework/radiobuttonresponse.pm	Fri May 16 15:25:08 2003
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # mutliple choice style responses
 #
-# $Id: radiobuttonresponse.pm,v 1.70 2003/04/18 17:10:08 sakharuk Exp $
+# $Id: radiobuttonresponse.pm,v 1.71 2003/05/16 19:25:08 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -295,9 +295,10 @@
     &Apache::lonxml::debug("Max is $max, From $#truelist elms, picking $whichtrue");
     my (@toplist, @bottomlist);
     my $topcount=0;
+    my $bottomcount=0;
     # assign everyone to either toplist/bottomlist or whichfalse
     # which false is randomized, toplist bottomlist are in order
-    while ((($#whichfalse) < $max-2) && ($#falselist > -1)) {
+    while ((($#whichfalse+$topcount+$bottomcount) < $max-2) && ($#falselist > -1)) {
 	&Apache::lonxml::debug("Have $#whichfalse max is $max");
 	my $afalse=int(&Math::Random::random_uniform() * ($#falselist+1));
 	&Apache::lonxml::debug("From $#falselist elms, picking $afalse");
@@ -310,10 +311,12 @@
 	    $topcount++;
 	} elsif ($bottom{$afalse}) {
 	    $bottomlist[$bottom{$afalse}]=$afalse;
+	    $bottomcount++;
 	} else {
 	    push (@whichfalse,$afalse);
 	}
     }
+    &Apache::lonxml::debug("Answer wants $answer");
     my $truename=$truelist[$whichtrue];
     my $dosplice=1;
     #insert the true statement, keeping track of where it wants to be
@@ -335,11 +338,12 @@
 	$answer+=$topcount+$#whichfalse+1;
 	$dosplice=0;
     } else {
-	if ($topcount>0) { 
-	  $answer = int(&Math::Random::random_uniform() * ($#whichfalse+1))
-	    + $topcount;
+	if ($topcount>0 || $bottomcount>0) {
+	    $answer = int(&Math::Random::random_uniform() * ($#whichfalse+1))
+		+ $topcount;
 	}
     }
+    &Apache::lonxml::debug("Answer now wants $answer");
     #add the top items to the top, bottom items to the bottom
     for (my $i=0;$i<=$#toplist;$i++) {
 	if ($toplist[$i]) { unshift(@whichfalse,$toplist[$i]) }