меняющиеся строки - PullRequest
0 голосов
/ 24 февраля 2012

ну, ребята, у меня есть небольшая проблема здесь, у меня есть 3 контейнера и XML с n узлами ... я хочу поместить в контейнеры любое значение XML, это значение не может быть одним старым значением и в контейнерах не должно иметь одинаковое значение ... у меня есть этот код в as3, но он не работает: S

package 
{ 
   import flash.display.MovieClip; 
   import flash.display.Sprite; 
   import flash.events.Event; 
   import flash.events.MouseEvent; 
   import flash.text.TextField; 



   public class Pruebas extends Sprite 
   { 

      public var arr:Array = new Array("valor0","valor1","valor2","valor3","valor4","valor5") 


      public var str1:String=arr[0]; 
      public var str2:String=arr[1]; 
      public var str3:String=arr[2]; 




      public var te1:TextField = new TextField(); 
      public var te2 :TextField = new TextField(); 
      public var te3 :TextField = new TextField(); 

      public var btn :MovieClip = new MovieClip(); 




      public function Pruebas() 
      { 
         te1.text = str1;     
         te2.text = str2; 
         te3.text = str3; 

         addChild(te1); 
         addChild(te2); 
         addChild(te3); 

         te2.x = 50;te3.x=100; 

         btn.graphics.beginFill(0xff00ff); 
         btn.graphics.drawCircle(151,150,15); 
         addChild(btn); 

         btn.addEventListener(MouseEvent.CLICK,cambiar); 
      } 


      public function cambiar(e:Event):void{ 
         var minLimit:uint = 0; 
         var maxLimit:uint = arr.length-1; 
         var range:uint = maxLimit - minLimit; 

         var someNum:Number = Math.ceil(Math.random()*range) + minLimit;       


         if(str1 == arr[someNum]){ 
            while(str1 == arr[someNum]){ 
               someNum = Math.ceil(Math.random()*range) + minLimit; 
            } 
            str1 = arr[someNum]; 
         }else{ 
            str1 = arr[someNum]; 
         } 
         someNum= Math.ceil(Math.random()*range) + minLimit;    

         if(str2 == arr[someNum]){ 
            while(str2 == arr[someNum]){ 
               someNum = Math.ceil(Math.random()*range) + minLimit; 
            } 
            str2 = arr[someNum]; 
         }else{ 
            str2 = arr[someNum]; 
         } 

         someNum= Math.ceil(Math.random()*range) + minLimit;    

         if(str3 == arr[someNum]){ 
            while(str3 == arr[someNum] || str3 ==str1 || str3 == str2){ 
               someNum = Math.ceil(Math.random()*range) + minLimit; 
            } 
            str3 = arr[someNum]; 
         }else{ 
            str3 = arr[someNum]; 
         } 




         te1.text = str1;     
         te2.text = str2; 
         te3.text = str3; 
      } 


   } 
}

Эдуардо Проверьте этот код, что этот код я сделал

if(imgactual == myXML.internas.item[someNum].@numero){
                while(imgactual == myXML.internas.item[someNum].@numero){
                    someNum = Math.ceil(Math.random()*range) + minLimit;
                }
                imgactual = myXML.internas.item[someNum].@numero
            }else{
                imgactual = myXML.internas.item[someNum].@numero
            }
            someNum= Math.ceil(Math.random()*range) + minLimit; 

            if((imgpostactual == myXML.internas.item[someNum].@numero) || (imgpostactual == imgactual) ){
                while(imgpostactual == myXML.internas.item[someNum].@numero || imgpostactual == imgactual){
                    someNum = Math.ceil(Math.random()*range) + minLimit;
                }
                imgpostactual = myXML.internas.item[someNum].@numero
            }else{
                imgpostactual = myXML.internas.item[someNum].@numero
            }

            someNum= Math.ceil(Math.random()*range) + minLimit; 

            if((imgpreactual == myXML.internas.item[someNum].@numero) || (imgpostactual == imgpreactual) || (imgpreactual == imgactual)){
                while((imgpreactual == myXML.internas.item[someNum].@numero) || (imgpostactual == imgpreactual) || (imgpreactual == imgactual)){
                    someNum = Math.ceil(Math.random()*range) + minLimit;
                }
                imgpreactual = myXML.internas.item[someNum].@numero;
            }else{
                imgpreactual = myXML.internas.item[someNum].@numero;
            }
            trace(imgactual);
            trace(imgpreactual);
            trace(imgpostactual);

плохо с этим кодом в том, что всегда цикл занимает много времени: S, и я думаю, что он не работает: S

Ответы [ 2 ]

1 голос
/ 24 февраля 2012

По сути, вы хотите выбрать 3 разных случайных числа между 0 и maxLimit, а затем выбрать элементы массива в этих позициях индекса.Один из способов сделать это, предоставив каждому индексу равные шансы, - создать массив с вашими субиндексами, которые вы перемешаете, и затем выбрать первые три элемента.Примерно так:

// Create the array with the indexes
var idxArray:Array = new Array();
for(var i:int = 0; i<=maxLimit; i++) idxArray.push(i);

// Shuffle it
for(var j:int = 0; j<=someNumberBigEnough; j++){
  var idx1:int = Math.ceil(Math.random()*range) + minLimit;
  var idx2:int = Math.ceil(Math.random()*range) + minLimit;
  // to shuffle, swap elements
  var aux:int = idxArray[idx1];
  idxArray[idx1] = idxArray[idx2];
  idxArray[idx2] = aux;
}

// Pick the first thee
str1 = arr[idxArr[0]]
str2 = arr[idxArr[1]]
str3 = arr[idxArr[2]]

, где someNumberBigEnough может быть, например, равным range

0 голосов
/ 25 февраля 2012

Другое решение состоит в том, чтобы проверить, является ли второй выбор тем же объектом, что и первый, а третий выбор - тем же объектом, что и первый и второй, захватывая другой случайный объект, если какой-либо из них совпадает.

Что-то вроде:

var index1:int = (int)(Math.random() * arr.length);
var index2:int = index1;
while (index2 == index1) {
    index2 = (int)(Math.random() * arr.length);
}
var index3:int = index1;
while (index3 == index1 || index3 == index2) {
    index3 = (int)(Math.random() * arr.length);
}

str1 = arr[index1];
str2 = arr[index2];
str3 = arr[index3];

цикл do while идеально подходит для этого ... Хотя я не мог вспомнить синтаксис от руки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...