Операторы
Switch
можно рассматривать как некоторые особые типы операторов If
. С одной крошечной вещью. Если тела case не включают оператор break
, тогда проверка регистра продолжается.
Что касается default case
, он выполняется, когда никакие другие проверки case не верны.
Те, что говорят , ваш оператор switch может быть записан как:
if(x == 45)
{
z = z + 15;
} else if(x == 46)
{
z = z - 5;
} else
{
z = z * 3;
}
Очевидно, какое значение z будет при заданных значениях x и z 44 и 5.
И, тела case без операторов break это ifs без elses:
if(x == 45)
{
z = z + 15;
}
if(x == 46)
{
z = z - 5;
}
z = z * 3;
Таким образом, когда вы запускаете коммутатор без перерывов, выполняются все случаи.
Для дальнейшего изучения рассмотрите этот код:
if(x == 44)
{
z = z / 5;
x = x + 1;
} else if(x == 45)
{
z = z + 15;
x = x + 1;
} else if(x == 46)
{
z = z - 5;
x = x + 1;
} else
{
z = z * 3;
}
и этот код
if(x == 44)
{
z = z / 5;
x = x + 1;
}
if(x == 45)
{
z = z + 15;
x = x + 1;
}
if(x == 46)
{
z = z - 5;
x = x + 1;
}
z = z * 3;
с такими же заданными значениями x = 44 и z = 5. Как вы можете видеть, я фактически добавил оператор x = x + 1;
к тому же switch on x
с такими же case
s и и новый случай, во всех where после назначения z, с break
s и без него. В первом примере значение z равно 1, даже если значение x увеличивается до 45; но проверки остановились, потому что не попали в блок else. Но во втором примере все блоки поражены, и значение z будет равно 33.