Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   переменные (http://www.flasher.ru/forum/showthread.php?t=100390)

54321go 27.08.2007 04:17

переменные
 
Код:

        var m1:Number = Math.floor(Math.random() * 10);
        var m2:Number = Math.floor(Math.random() * 10);
        var m3:Number = Math.floor(Math.random() * 10);
        var m4:Number = Math.floor(Math.random() * 10);

Как сделать чтобы переменные m1, m1, m3, m4 были разные? То-есть сделать так чтобы не было совпадений.

Mr. Fixit 27.08.2007 04:31

используй:
Код:

m1 = Math.floor (Math.random ()*10);
m2 = Math.floor (Math.random ()*10);
m3 = Math.floor (Math.random ()*10);
m4 = Math.floor (Math.random ()*10);
if (m2 == m1) {
        m2 = Math.floor (Math.random ()*10);
} else if (m3 == m2) {
        m3 = Math.floor (Math.random ()*10);
} else if (m4 == m3) {
        m4 = Math.floor (Math.random ()*10);
}
trace (m1+', '+m2+', '+m3+', '+m4);


DarkLight 27.08.2007 04:36

2 Mr. Fixit

А если m4 будет равной m1? Если m2 == m1, то дальнейшие if вообще не выполнятся. Следуя этой логике надо пихать все это в цикл, что добавит проблем

Надо так:
Код:

function getNumArray($num:Number):Array {
        if ($num<0) {
                return;
        }
        var _result:Array = new Array();
        for (var i:Number = 0; i<$num; i++) {
                _result.push(i);
        }
        return _result;
}
function randomAdv($source:Array):Number {
        var _index:Number = Math.floor(Math.random()*$source.length);
        return $source.splice(_index,1)[0];
       
}
var _source:Array = getNumArray(10);
var m1:Number = randomAdv(_source);
var m2:Number = randomAdv(_source);
var m3:Number = randomAdv(_source);
var m4:Number = randomAdv(_source);
trace(m1+" "+m2+" "+m3+" "+m4);


Mr. Fixit 27.08.2007 04:53

DarkLight
Проверьте сначала мой код, а потом делайте выводы.

Вы хороший код написали.
Разъясните, что обозначает эта строка(и как тут взаимодействует [0]):
Код:

source.splice(_index,1)[0];

DarkLight 27.08.2007 05:00

На вход подается массив значений, из него выбирается элемент с рандомным номером, который при этом удаляется из массива. Т к splice возвращает массив, даже если элемент удаляется один - беру нулевой элемент.

Ваш код в трейсе в ходе тестирования выдал:
Код:

8, 2, 0, 4
1, 8, 1, 6//  повтор
2, 4, 8, 0
7, 1, 8, 1//  повтор
9, 3, 5, 0
5, 2, 6, 2// повтор


Mr. Fixit 27.08.2007 05:02

да, вот там и повтор. Что смог сделать, то сделал. Дальше - Лучше.

CorC 27.08.2007 10:18

А зачем начинать все заново с 1 переменной, если совпадение допустим в 3?
Тогда из 10 переменных сколько это будет выполняться то!!!

Tardos Mors 27.08.2007 10:59

Код:

var vars:Array = new Array ();
function unicNum(searchArray:Array, max:Number, min:Number):Number
{
        if (max == null) return;
        if (min == null) min = 0;
        var currentNum = Math.round(Math.random()*(max - min)) + min;
        var error:Boolean = false;
        for (var i:Number = 0; i < searchArray.length; i++)
        {
                if (searchArray[i] == currentNum)
                {
                        error = true;
                        break;
                }
        }
        if (error == true) currentNum = unicNum(searchArray, max, min);
        return currentNum;
}
for (var a:Number = 0; a < 5; a ++)
{
        vars[a] = unicNum(vars, 10);
        _root["m"+a] = vars[a];
}
trace (m0 + ", " + m1 + ", " + m2 + ", " + m3 + ", " + m4);



Часовой пояс GMT +4, время: 10:21.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.