Назначение в do-while / while работает не так, как ожидалось

Я хочу назначить случайное значение между 48 и 122 $num за исключением значения 79.

Таким образом, чтобы решить эту проблему, я попытался использовать цикл «время и время» для решения проблемы. Я протестировал его, но он не работает, как ожидалось, и заканчивается бесконечным циклом.

while($num != 79){
$num =  rand(48, 122);
};

или же:

do {
$num = rand(48, 122);
} while ($num != 79);

Так почему же это не работает так, как я хочу? Может кто-нибудь сказать мне, где моя ошибка?

$ num должно быть числом от 48 до 122, но НЕ 79.

3

Решение

объявлять $num со значением 79, чтобы убедиться, что цикл начинается
и цикл завершится, когда $num!=79

$num = 79; // to make sure the loop will iterate at least once
while( $num==79 ){
$num =  rand(48, 122);
}

согласно вашему запросу, кроме 111, измените условие, как показано ниже:

while( $num==79 || $num==111)

do-while будет использовать то же условие, и нет необходимости назначать 79 в качестве начального значения, так как do-while будет запускаться хотя бы один раз.

$num = 0; //just to declare the variable
do {
$num = rand(48, 122);
} while ($num == 79); // you can use || here too: while ($num == 79 || $num == 111)
4

Другие решения

В обоих случаях логика неверна, вы повторяете цикл, пока ваш номер не является 79

Вы должны повторить цикл, если число является 79:

$num = 79;// assign value to avoid Notice error
while($num == 79){
$num =  rand(48, 122);
};

или же:

do {
$num = rand(48, 122);
} while ($num == 79);
6

попробуй этот код

$num = 0;
while(true){
$num = rand(48,122);
if( $num != 79){
break;
}
}
-2
По вопросам рекламы [email protected]