Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как в Swith/case сделать От и До? (http://www.flasher.ru/forum/showthread.php?t=147184)

cfanya 28.11.2010 15:16

Как в Swith/case сделать От и До?
 
Подскажите пожалуйста, как при помощи switch/case сделать что-то вроде:

Код AS3:

switch (name)
{
case name > 10:
        rnd = 15;
break;
 
case name > 50:
        rnd = 20;
break;
}

Т.е. чтобы каждый case был равен не одному числу, а целому интервалу чисел. Например, от 1 до 10, от 11 до 20 и т.д.
Ну не перечислять же все цифры подряд - 12,13,14,15...

Заранее спасибо за ответ.

P.S.:Только начинаю разбираться а AS3.

КорДум 28.11.2010 15:19

Проще взять if-else-if.
Код AS3:

if (name > ... && name < ...) ...
else if (name > 50) ...

Код AS3:

switch (name)
{
case name > 10:
        rnd = 15;
break;
 
case name > 50:
        rnd = 20;
break;
}

А это запись вообще неправильная.

bav 28.11.2010 15:20

Можно воспользоваться конструкцией if else if:
Код AS3:

if (name >= 1 && name <= 10) {...}
else if (name > 10 && name <= 20) {...}
else if (name > 20 && name <= 30) {...}

Но что-то мне подсказывает, что есть менее копипастные способы.

cfanya 28.11.2010 15:23

Цитата:

А это запись вообще неправильная.
Да, я знаю. Оно и не работает. Просто для примера привел.

Цитата:

Можно воспользоваться конструкцией if else if
Спасибо.

Цитата:

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

iNils 28.11.2010 15:29

Если интервал равномерный или есть закономерность, то можно вывести формулу.

cfanya 28.11.2010 15:32

Цитата:

Если интервал равномерный или есть закономерность, то можно вывести формулу.
Интервал равномерный. Вы не могли бы чуть-чуть поподробней, насчет формулы...

cleptoman 28.11.2010 16:01

ну, если принципиально switch, то примерно так:

Код AS3:

switch(true){
case (name > 0 && name <=10):
//
break;
case (name > 10 && name <=50):
//
break;
}


iNils 28.11.2010 16:03

Цитата:

Сообщение от cfanya (Сообщение 953142)
Интервал равномерный. Вы не могли бы чуть-чуть поподробней, насчет формулы...

Могу, только дайте больше информации. Из первого поста не ясна закономерность.

cfanya 28.11.2010 16:53

Цитата:

ну, если принципиально switch, то примерно так:

Код AS3:

switch(true){
case (name > 0 && name <=10):
//
}


В том то и дело, что так не работает.

Цитата:

Могу, только дайте больше информации. Из первого поста не ясна закономерность.
Вот:
Код AS3:

switch (time)
{
case 0: sTime = "Ночь"; break;
case 1: sTime = "Ночь"; break;
case 2: sTime = "Ночь"; break;
case 3: sTime = "Ночь"; break;
case 4: sTime = "Ночь"; break;
case 5: sTime = "Ночь"; break;
case 6: sTime = "Утро"; break;
case 7: sTime = "Утро"; break;
case 8: sTime = "Утро"; break;
case 9: sTime = "Утро"; break;
case 10: sTime = "День"; break;
case 11: sTime = "День"; break;
case 12: sTime = "День"; break;
case 13: sTime = "День"; break;
case 14: sTime = "День"; break;
case 15: sTime = "День"; break;
case 16: sTime = "День"; break;
case 17: sTime = "День"; break;
case 18: sTime = "Вечер"; break;
case 19: sTime = "Вечер"; break;
case 20: sTime = "Вечер"; break;
case 21: sTime = "Вечер"; break;
case 22: sTime = "Ночь"; break;
case 23: sTime = "Ночь"; break;
}


gloomyBrain 28.11.2010 17:01

Тогда уж вот так
Код AS3:

switch (time)
{
case 0: sTime = "Полночь"; break;
case 1:
case 2:
case 4:
sTime = "Глубокая ночь";
break;
 
case 5:
case 6:
sTime = "Рассвет";
break;
 
case 7:
case 8:
sTime = "Утро";
break;
 
case 9: sTime = "Позднее утро"; break;
case 11: sTime = "Ранний день"; break;
case 12: sTime = "Полдень"; break;
 
case 13:
case 14:
case 15:
case 16:
sTime = "День";
break;
 
case 17: sTime = "Ближе к вечеру"; break;
case 18: sTime = "Ранний вечер"; break;
 
case 19:
case 20:
case 21:
sTime = "Вечер";
break;
 
case 22:
case 23:
sTime = "Ночь";
break;
}


goodguy 28.11.2010 17:04

Цитата:

Сообщение от cfanya (Сообщение 953138)
Просто не хочется уж слишком растягивать программу по размеру.

Если использвать в каждом блоке только по одной строке, то if - else if можно писать без {}

Соответственно, такая конструкция будет ни чуть не больше конструкции с кейсами

Код AS3:

if  (name > 0 && name <=10) doSomethig();
else if (name > 10 && name <=50) doSomethingElse();


iNils 28.11.2010 17:04

И где тут равномерность?
ночь 7 значения
утро 4
день 9
вечер 4

КорДум 28.11.2010 17:05

Да и вообще:
Код AS3:

arrTime = ["Ночь", "Ночь", "Ночь", "Ночь", 
          "Ночь", "Ночь", "Утро", "Утро",
          "Утро", "Утро", "День", "День",
          "День", "День", "День", "День",
          "День", "День", "Вечер", "Вечер",
          "Вечер", "Вечер", "Ночь", "Ночь"];
sTime = arrTime[time];


TWETTI 28.11.2010 17:09

Я бы сделал так:
Код AS3:

 
sTime = time > 5 && time < 10?"Утро":time > 9 && time < 19?"День":time > 18 && time < 23?"Вечер":"Ночь";


cfanya 28.11.2010 17:10

Цитата:

Тогда уж вот так
Ну да, но хотелось количество case-ов сократить. Это тут их только 24, а иногда их бывает и гораздо больше.
Я думал, что можно написать что-то типа:
Код AS3:

switch(true){
case (name > 0 && name <=10):
//
}

Только, что бы работало :)

КорДум 28.11.2010 17:11

TWETTI, а вы потом быстро поймете, что у вас где? А представьте себя на месте новичка :)

RandomUser 28.11.2010 17:13

Может так будет проще?
Код AS3:

var dayTimes: Array = [
        ["Ночь", 0, 5],
        ["Утро", 6, 7],
        ["День", 8, 20],
        ["Вечер", 21, 22],
        ["Ночь", 23, 23],
];
 
function getDayTime(time: int) : String
{
        for each (var t: Array in dayTimes)
        {
                if (time >= t[1] && time <= t[2]) return t[0];
        }
        return null;
}


TWETTI 28.11.2010 17:13

КорДум, тогда вот так понятнее будет.
Код AS3:

sTime = time > 5 && time < 10 ? "Утро": // Если время от 5 до 10 -> утро
        time > 9 && time < 19 ? "День": // Если время от 9 до 19 -> день
        time > 18 && time < 23 ? "Вечер": // Если время от 18 до 23 -> вечер
        "Ночь"; // Иначе ночь


cfanya 28.11.2010 17:13

О! Всем спасибо. Я так понял, что if/else без {} действительно лучше и не сильно громоздко. И с массивом тоже класно. Всем большое спасибо.

expl 28.11.2010 18:01

Цитата:

Цитата:
ну, если принципиально switch, то примерно так:

Код AS3:

switch(true){
case (name > 0 && name <=10):
//
}

В том то и дело, что так не работает.
Не верю!

alatar 28.11.2010 18:01

Цитата:

Я так понял, что if/else без {} действительно лучше и не сильно громоздко
Особенно, если дважды не проверять значения:
Код AS3:

if (time < 5)
{
    sTime = "Ночь";
}
else if (time < 10)
{
    sTime = "Утро";
}
else if (time < 19)
{
    sTime = "День";
}
else if (time < 23)
{
    sTime = "Вечер";
}
else
{
    sTime = "Ночь";
}

или
Код AS3:

sTime = time > 5 && time < 10 ? "Утро": // Если время от 5 до 10 -> утро
        time < 19 ? "День": // Если время от 9 до 19 -> день
        time < 23 ? "Вечер": // Если время от 18 до 23 -> вечер
        "Ночь"; // Иначе ночь


Партизан 28.11.2010 18:22

Вот чет написалось от нечего делать

cleptoman 28.11.2010 18:32

ну, оно , может и удобно, но как то тяжеловато для задачи автора, мне кажется )

Партизан 28.11.2010 18:35

Цитата:

Сообщение от cleptoman (Сообщение 953201)
ну, оно , может и удобно, но как то тяжеловато для задачи автора, мне кажется )

Может и так, только не для него конкретно писал :)))
полегче есть вот это:
Код AS3:

        var arr:Array = [[0, 10], [10, 20], [20, 300]];
                        var val:Number = 10;
 
                        for each(var i:Array in arr) {
                                if (val >= i[0] && val <= i[1]) {
                                        trace(i[0], ">=", val, "<=", i[1])                                       
                                }
                        }


-De- 28.11.2010 20:29

например
Код AS3:

switch (int(((time+2)%24)/4))
{
case 0:
case 1:
sTime = "Ночь"; break;
case 2:
sTime = "Утро"; break;
case 3:
case 4:
sTime = "День"; break;
case 5:
sTime = "Вечер"; break;
}

[/quote]

КорДум 28.11.2010 20:34

-De-, вы суровы - новичку такую формулу давать ;)
Самое простое - сделать массивом, ибо там хоть на каждый час вешай свое название. А те, кто видел первоначальный код, предоставленный автором (а я среди них), помнят, что там почти каждый час символизировал что-то свое.

-De- 28.11.2010 21:13

Ещё проще =)
Код AS3:

switch (int(((time+2)%24)/4)int(((time+2)%24 + 8)/12) )
                                {
                                case 0:
                                sTime = "Ночь"; break;
                                case 1:
                                sTime = "Утро"; break;
                                case 2:
                                sTime = "День"; break;
                                case 3:
                                sTime = "Вечер"; break;
                                }

Код AS3:

var daytimes:Array = ["Ночь","Утро","День","Вечер"];
sTime = daytimes[int(((time+2)%24)/4)int(((time+2)%24 + 8)/12)];


Psycho Tiger 28.11.2010 22:24

"Помогите, мне кажется лопатой неудобно рубить дрова!".

Посоветуют любой апгрейд лопаты, кроме использования топора. Удивительно)

i.o. 28.11.2010 23:47

Код AS3:

switch (int(((time+2)%24)/4)int(((time+2)%24 + 8)/12) )

-De-, жесть. С первого взгляда я не въехал, такое бывает редко... Попозже уделю время :)

expl 29.11.2010 01:25

Цитата:

switch (int(((time+2)%24)/4) - int(((time+2)%24 + 8)/12) )
Да, так и надо писать. Заставте лентяев, читающих ваш код, расшифровывать каждую строчку :)

in4core 29.11.2010 01:45

Цитата:

Цитата:
Цитата:
ну, если принципиально switch, то примерно так:

Код AS3:

switch(true){
case (name > 0 && name <=10):
//
}

В том то и дело, что так не работает.
Не верю!
А зря не веришь. Посуди сам, может быть такая ситуация

Код AS3:

switch(true) {
 case false:
 break;
 case true:
 break;
 case true:
 break;
 case true:
 break;
 case false:
 break;
}

ну и соотв цикл обырвается при первом совпадении

expl 29.11.2010 02:27

Цитата:

ну и соотв цикл обырвается при первом совпадении
так и должно быть

cfanya 29.11.2010 13:29

Спасибо огромное всем за ответы.

И, кстати, с точки зрения новичка, вот с этой формулой, приведенной выше:
Код AS3:

switch (int(((time+2)%24)/4))

я разобрался быстрее чем с массивами.

Хотя и вариант с массивом был очень полезен.


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

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