Форум 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=124523)

oiBulldog 02.05.2009 02:45

Подскажите по неравенствам:)
 
Объясните пожалуйста, почему в одном случае выдаётся "true", в другом "false", причём это всё как то связано с "1", при замене допустим на "4" или "6" в обоих случая выдаётся "true". Подскажите как происходит обсчёт и как этого избежать, чтобы всё считалось верно?
Код AS1/AS2:

q = 9;
w = 8;
e = 7;
r = 1;
trace(q!=w!=e!=r);
trace(q!=w!=r!=e);


VVall 02.05.2009 03:05

Как избежать - не писать подобных конструкций. Есть скобки, есть && и ||. Не надо лишний раз запутывать компилятор и себя.

iNils 02.05.2009 03:41

Для оформления своего кода надо использовать теги [code][/code]

При неравенстве с единицей, последняя преобразуется в булево значение true, что не происходит с другими числами, они дают false. Есть строгое неравенство !== там такого не будет.
В вашем случаи q!=w это true, true != 7 тоже true, а true != 1, это true != true, что дает false.
Получается:
(true != true) != false, это false != false и результат true
(true != false) != true, это true != true и результат false

oiBulldog 02.05.2009 13:35

Ясно, немного разобрался в механизме. Спасибо. Но тогда возникает вот какой вопрос, а как тогда всё таки добиться того, что изначально планировал, как должно выглядеть уровнение, которое выдаёт "false" в том случае если хотя бы "2" из "n" чисел равны и "true" в том случае если все числа отличны друг от друга?:)

Psycho Tiger 02.05.2009 13:49

Ну, каждое нужно сравнить с каждым. Это 2 вложенных цикла.

oiBulldog 02.05.2009 14:25

Это ясно, то есть без цикла не обойтись?)

Psycho Tiger 02.05.2009 14:40

Ну в голову пока идея не лезет.
Когда на бумажке смотришь на цифры, ты ведь каждый сравниваешь с каждым, так?

iNils 02.05.2009 14:45

Можно, ручками.
Код AS1/AS2:

trace(q!=w && q!=e && q!=r && w!=e && w!=r && e!=r);

Но смотрите, для 3-х чисел нужно 3 сравнения, для 4-х 6, а для 5 - 10. А если чисел больше?
Но два цикла не надо, хватит одного.
Код AS1/AS2:

var array:Array = [9, 8, 7, 1];
var arrayComparison:Array = [];
var result:Boolean = true;
for (var i:Number = 0; i < array.length; i++) {
        if (arrayComparison[array[i]] == true) {
                result = false;
                break;
        } else {
                arrayComparison[array[i]] = true;
        }
}
trace (result);


etc 02.05.2009 14:58

Код AS1/AS2:

var array:Array = [9, 8, 7, 1, 5, 4];
var result:Boolean = true;
var index:Number;
 
for (var i:Number = 0; i < array.length; i++) {
        index = array.indexOf(array[i]);
 
        if (index >= 0 && index != i) {
                result = false;
                break;
        }
}
trace (result);

:p

Wolsh 02.05.2009 15:00

Гениально! Спасибо, никогда бы сам такое не придумал))) Меня только на такое хватило))
Код:

var array:Array = [1, 8, 4, 9];
var arrayCom:Array = array.sort();
var result:Boolean = true;
for (var i:Number = 0; i < arrayCom.length; i++) {
    if (arrayCom[i] == arrayCom[i+1]) {
        result = false;
        break;
    }
}
trace (result);



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

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