Просмотр полной версии : Как работает 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();
Ах да, вы только спрашиваете про свитч... Ну дык ВЕЗДЕ можно обойтись без него!
Уважаемый "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");
}
Уважаемый 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);
Ай ай ай, ой ой ой,
Происходит что со мной!!!
Наезжает на меня
Уже местная братва.
Не дурак я и не мудр:
Местом - мысль, местом - юмор;
Где-то гордость верх берет: -
Как его там?... достает
Дорогой друг, как вас там!
Не знаю, какие там противоречия ты себе нафантазировали, дружище, но логика в твоих рассуждениях окнчательно потерялася. А вот она-то как раз очень важна в программировании.
Поэтому, как другу!!!, дам тебе совет: бросай ты это дело и займись лучше рыбалкой...!
Ну а если серьезно...
Да! Я действительно привел глупый!!! пример. Но! умные, образованные люди правильно сделали, что не стали акцентировать на нем все свое внимание, а действительно помогли мне советами о том как он применяется, где, когда и о том как его можно модифицировать! В их сообщениях я-то и нашел ответ на интересующий меня вопрос. И выложил этот ответ, (см ТЕМ НЕ МЕНЕЕ), как итог этой темы! (прошу отметить - "итог темы"; особенно это касается девочек-камикадзе с ядовито-желтыми волосами и рогами). И получив ответ на свой вопрос, я пришел к выводу, что в моем случае лучше от switch отказаться!
Вот мой вариант оптимизации!
x = random(100);
if (x<=90) {
f = (x<=30) ? "комПорт" : (x>60) ? "комПот" : "комВзвод";
} else {
f = "Это уже ргубо";
}
trace (x);
Nox Noctis
27.01.2004, 11:45
range = function (l, u, v) {
return (l-v)*(u-v)<0;
};
var n = random(10);
trace(n+" : 0 -- 5 : "+range(0, 5, n));
var n = random(10);
trace(n+" : 0 -- 5 : "+range(0, 5, n));
var n = random(10);
trace(n+" : 0 -- 5 : "+range(0, 5, n));
по-моему так удобнее. и в ифах лучше смотрится...
зы: ув. тов. FlasFan, мои соболезнования по поводу вашего чувства юмора :)
кароче в свиче интервалы устонавливать нельзя и я не помню не одного языка в котором можно так что забей
1 юзай
if(condition){
statement(s);
}else{
statement(s);
};
2 юзай
expression1 ? expression2 : expression3
ну а в твоем случае с использованием свича можно еще предложить такое решение похожее приводил sergiwizard
var m = 1;
z = (m>0 && m<10) ? 1 : 2;
z = (m>9 && m<100) ? 2 : 1;
z = (m<1 || m>99) ? 3 : z;
switch (z) {
case 1 :
trace("1-9");
break;
case 2 :
trace("10-99");
break;
default :
trace("D");
break;
}
2 Nox
Эта функция действительно интересна!
Но у нее есть одна особенность: она либо исключает верхнюю и нижнюю границу, либо включает их обе! Разбейте числа на интервалы / => [0..29), [30..59),[60..90] и др <=/ с помощью if else и я, обещаю, что забью, на то, как это смотрится! Но как бы то не было, повторяю, функция действительно классная!
2 opex
для эрудиции: этот язык программирования - турбо паскаль семь ноль!
для ирудиции это AS 2.0 иди бейсик юзай
kompadre
28.01.2004, 00:39
И не только 2,0... В ас1 это вполне правильно
Nox Noctis
02.02.2004, 13:34
нашел в книге колина мука по программированию в МХ:
switch (true) {
case (x < 10):
trace("x is less than 10.");
break;
case (x >= 10 && x <= 20):
trace("x is between 10 and 20.");
break;
case (x > 20):
trace("x is greater than 20.");
break;
}
// ...
switch (x) {
case 1:
case 3:
case 5:
trace("x is 1, 3, or 5");
break;
default:
trace("x is not 1, 3, or 5");
}идея понятна, только не понятно нафиг такое надо :)
хотя switch(true) - это по-моему оригинально :))
Nox Noctis, огромное тебе спасибо!
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.