оператор switch не работает, только первый случай запускает действия - PullRequest
0 голосов
/ 19 декабря 2010

Я новичок в написании переключателей после того, как узнал об этом вчера.

По какой-то причине это не работает.

checkCase(2);
checkCase(1);
checkCase(0);
function checkCase(priorityType){
switch(priorityType){
     case 2:
         print(priorityType);
         break;             
        case 1:
        print(priorityType);
            break;          
        case 0:
        print(priorityType);
        break;
     }
}

Предупреждение (2) срабатывает, 1 и 0 - нет.Я перевернул случай 2: с делом 1: и снова запустил код, а 2 снова сработал, 1 - нет.Я также попытался добавить разрыв;и продолжить;к случаям, но все еще ничего.

Почему это?что я сделал не так?----------------------РЕДАКТИРОВАТЬ---------------------------Множество ответов говорят, что мне нужно добавить 'break;'который я сейчас сделал для каждой строки.По-прежнему нет выхода.Я также изменил «предупреждение» на «печать».Нет разницы.

------------- edit2 ----------------------- мой плохой 'разрыв'сейчас работает.не уверен, что происходило, когда я проверял последний раз.Может быть, нужно перезагрузить FF.

Ответы [ 3 ]

2 голосов
/ 19 декабря 2010

Две проблемы: отладка с использованием alert проблематична, и вам нужно break операторов.

Попробуйте добавить break s и использовать print в квадратной свободной оболочке ,и я думаю, что вы увидите правильный результат.

checkCase(2);
checkCase(1);
checkCase(0);
function checkCase(priorityType){
switch(priorityType){
     case 2:
         print(priorityType);               break;
        case 1:
        print(priorityType);            break;
        case 0:
        print(priorityType);   break;
     }
}
2 голосов
/ 19 декабря 2010

Вы должны break; после каждого случая.

function checkCase(priorityType){
    switch(priorityType){
        case 2:
             alert(priorityType);
        break;         

        case 1:
            alert(priorityType);    
        break;        

        case 0:
            alert(priorityType);
        break;

        //my two cents
        default:
            alert("No intended code for"+priorityType);
     }
}

checkCase(2);
checkCase(1);
checkCase(0);
1 голос
/ 19 декабря 2010

Поскольку нет операторов разрыва, как только найден соответствующий случай, он и последующие случаи будут запущены.

Поэтому, когда вы выполните:

checkCase(2);

Вы получите:

alert(2);
alert(2);
alert(2);

Когда вы делаете:

checkCase(1);

Вы получите:

alert(1);
alert(1);

Когда вы сделаете:

checkCase(0);

ВыВы получите:

alert(0);

Если вы надеетесь получить:

alert(2);
alert(1);
alert(0);

Вам нужно изменить свой переключатель, чтобы включить break; операторов.

function checkCase(priorityType){ 
   switch(priorityType){
     case 2:
         alert(priorityType);
         break;           
     case 1:
        alert(priorityType);       
        break;     
     case 0:
        alert(priorityType);
        break;
     }
}
...