Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript (http://www.flasher.ru/forum/forumdisplay.php?f=5)
-   -   Как работает switch? (http://www.flasher.ru/forum/showthread.php?t=54008)

FlasFan 25.01.2004 07:21

Как работает switch?
 
Есть во флэше такая штука как switch:
switch (number) {
case exp1:
case exp2:
default:
}

Как вместо expN поставить не одно значение, а несколько
а) перечислением, н-р 1,2,3
б) все значения из определенного интервала , н-р 4-8 (т.е. 4, 5, 6, 7, 8)
В справке FlashMx этого нет, в имеющейся литературе тоже. А ведь это одна из основ программирования.
Вот что у меня было:
switch (k) {
case 1-9 : func1(); break;
case 10-99: func2(); break;
default : func3();
}
}
На деле же работает только для чисел не превышающих 10, все остальное принимает за default.
Если default заменить на case 100-999 то невыполняется ничего! пустота да и только!
Вопрос: Как заставить его видеть интервал???

ps Я знаю что в данном примере можно легко обойтись и без switch'а. Вопрос этот касается только самого действия switch, а не о том, как мне написать программу. Спасибо!

kompadre 25.01.2004 20:45

Хехе ... ну и основы программирования у вас :)

Не работает ваш странный свитч (в первы раз вижу такой синтаксис) - иф/элс иф/элс не значительно дольше написать. И понятнее кстати :o

if ((k > 1)&&(k < 10)) func1;
else if ((k > 10)&&(k < 20)) func2();
else func3();


Ах да, вы только спрашиваете про свитч... Ну дык ВЕЗДЕ можно обойтись без него!

FlasFan 25.01.2004 21:32

Уважаемый "k... как вас там?"

значит ты тоже не знаешь как работает свитч....

sergwizard 26.01.2004 00:05

В таких случаях, когда нам нужен интервал значений, то лучше присвоить каждому интервалу свою переменную, и потом, в switch обращаться именно к этой переменной.
Пример:
Сделай динамическое поле с var "txt", и положи во фрейм следующий код.
Код:

function rand(){
        numb = random(100);
        if(numb<=10){num=0};
        if(numb>10&&numb<=20){num=1};
        if(numb>20&&numb<=30){num=2};
        if(numb>30&&numb<=40){num=3};
        if(numb>40&&numb<=50){num=4};
        if(numb>50&&numb<=60){num=5};
        if(numb>60&&numb<=70){num=6};
        if(numb>70&&numb<=80){num=7};
        if(numb>80&&numb<=90){num=8};
        if(numb>90&&numb<=100){num=9};

switch (num) {
        case 0:
                txt = "Десять";
                break;
        case 1:
                txt = "Двадцать";
                        break;
        case 2:
                txt = "Тридцать";
                        break;
        case 3:
                txt = "Сорок";
                break;
        case 4:
                txt = "Пятьдесят";
                        break;
        case 5:
                txt= "Шестьдесят";
                        break;
        case 6:
                txt = "Семьдесят";
                        break;
        case 7:
                txt = "Восемьдесят";
                        break;
        case 8:
                txt = "Девяносто";
                        break;
        default:
        txt = "Это уже слишком!"
}
}
setInterval(rand,2000)

Из примера видно, что если есть интервал значений, то удобнее и легче обходиться без switch.

kompadre 26.01.2004 00:26

Уважаемый как вас там,

практически в любом языке программирования Ваш
Код:

case 1-9 :
будет восприниматся как
Код:

case -8 :
Включая флэш action script.
Попробуй-ка
Код:

num = -9;
switch (num) {
        case 1-10 :
                trace(" Num равняется -9!!!");
                break;
        case 20-30 : t
                trace(" Num равняется -10!!!");
                break;
        default :
                trace("Default");
}


FlasFan 26.01.2004 11:05

Уважаемый sergwizard
спасибо за полезный совет. Я не замедлил применить его на практике, немного изменив и сократив код.
Код:

function rand(){
        numb = random(100);
        if(numb<=30){num=0};
        if(numb>30&&numb<=60){num=1};
        if(numb>60&&numb<=90){num=2};
switch (num) {
        case 0:
                txt = "Компахарь"; break;
        case 1:
                txt = "Компудель"; break;
        case 2:
                txt = "Компудра"; break;
        default:
                txt="Это уже грубо"
} } 
setInterval(rand,2000)

Уважаемый как вас там.
Ваш пример я тоже применил на практике и наглядно убедился что 1-10 будет -9, а 20-30 будет -10. У меня нет слов чтоб описать мой восторг!

ТЕМ НЕ МЕНЕЕ (мой грустный вывод)
Писать надо case <значение>
Не "интервал", не "значения", а одно единственное "значение".

kostyanK 26.01.2004 12:41

Еще как вариант - не использовать break;
т.е.
switch (k) {
case 1 :
case 2 :
case 3 :
case 4 :
case 5 :
case 6 :
case 7 :
case 8 : func1(); break;
... и т.д.
default : func3();
}

kompadre 26.01.2004 18:40

Я очень рад что вы пришли к противоричивой мысле о том что даже Вы не знаете как работает свитч.

Позвольте мне еще немного сократить Ваш с sergiwizard код что бы доказать преимущество учиться программировать перед предумыванием своего *личного* синтаксиса к языкам программирования
Код:

function rand() {
        var numb = random(100);
  var out = "";
        if(numb<=30) out = "FlasCan разбушивался";
        else if(numb>30&&numb<=60) "FlasBan разбушивался";
        else out = "Уважаемый нафаня, как вас там, зарубите себе на носу : фантазия в программировании приводит только к грустным выводам.";
        return (out);
} 
setInterval(rand,2000);


Nox Noctis 26.01.2004 19:09

Цитата:

Оригинал написал(а) FlasFan
ТЕМ НЕ МЕНЕЕ (мой грустный вывод)
Писать надо case <значение>
Не "интервал", не "значения", а одно единственное "значение".
вывод потрясающий основы мироздания, ага.

2FlasFan
можно узнать название хотя бы одного языка программирования, где ваша конструкция вида "case 1-9 : func1(); break;" даст корректный результат. было бы любопытно узнать об этой основе программирования побольше.

а во флэше свитч предназначен только для того чтобы не писать много-много ифов слитно. и больше ни для чего.

kostyanK 26.01.2004 19:24

фантазия в программировании приводит только к победе ))
Код:

function rand() {
        var numb = random(100);
        var out = "";
        switch (Math.floor(numb/30)) {
        case 0 : out = "FlasCan разбушивался";break;
        case 1 : out = "FlasBan разбушивался";break;
        default : out = "Уважаемый нафаня, как вас там, зарубите себе на носу : фантазия в программировании приводит только к грустным выводам.";
        }
        return (out);
}
setInterval(rand, 2000);



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

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