2016-01-19 6 views
-1

Ниже мой незавершенный код. Последний бит решил бросить бесконечный цикл. Я пытаюсь создать сценарий случайных чисел, который не будет повторять число из 7 случайных выборов. Кажется, как только я добавил || на последней строке, сценарий начинает цикл. Может ли кто-нибудь сказать мне, что я делаю неправильно?PHP Do-While loop

<?php 

$n1 = rand(1, 12); 
$n2 = rand(13, 21); 
$n3 = rand(15, 27); 
$n4 = rand(20, 38); 
$n5 = rand(30, 46); 
$n6 = rand(39, 49); 
$bo = rand(1, 49); 

// First number 
echo $n1 . " "; 

// Second number 
do { 
    echo $n2 . " "; 
} while ($n1 == $n2); 

// Third Number 
do { 
    echo $n3 . " "; 
} while ($n3 == $n2 || $n1); 

?> 
+0

Выезд эту таблицу для оператора старшинства: http://php.net/manual/en/language.operators.precedence.php –

+0

Я подозреваю, что вы закодированы это путь вы подумали об этом, то есть окончательное условие (в вашем уме было): «пока n3 равно n2 или n1». В логике программирования вы должны выразить эту идею как «пока n3 равно n2 или n3 равно n1». То, как в настоящее время записывается условие, оценивается как true, если n3 равно n2 или n1 не является нулевым. –

+0

Брендон Я думаю, что я был настроен под напряжением, когда написал это. Я сделал перерыв, и когда я вернулся, я увидел, что у меня не получится, что мне нужно. Я буду продолжать искать новый метод. Я хочу 7 разных чисел между 1 и 49, но каждый обратный номер находится между конкретным значением или наиболее обратными значениями в базе данных. поэтому числа randoms rand() различны. –

ответ

-1

Приоритет || ниже, чем == так на самом деле это больше похоже на это:

while(($n3 == $n2)||$n1)) 

, и я думаю, что это не вы хотите, чтобы изменить его

while(($n3 === $n2)||($n3 === $n1)) 

И, пожалуйста, имейте в виду, чтобы использовать === для сравнения.

Я надеюсь, что это помогает

+0

Спасибо за помощь, ваше решение сработало. Я использовал ==, потому что я думал, что строки были обернуты текстом между « –

+1

@KellyDodsworth. Как это правильно? Он не решает проблемы с циклом? – cmorrissey

+1

да, он остановил проблему с циклом –

2

$n1 всегда находится отличается от 0, то

do { 
    echo $n3 . " "; 
} while ($n3 == $n2 || $n1); //<-- allways true 
+0

Это правильно. Почему нисходящий? –

+1

Я предполагаю, что это останется загадкой навсегда .. –

2

Что @Majid сказал было правильным. Проверьте PHP's operator precedence.

== оператор предшествует || оператор для выполнения, так долго, как $n1 не false -y, цикл никогда не выходит.

0

Здесь много проблем, но вот начало на правильном пути. Комментарии встроены.

<?php 

$n1 = rand(1, 12); 
$n2 = rand(13, 21); 

// First number 
echo $n1 . " "; 

// Second number 
// no loop needed as your rand doesn't overlap your $n1 
echo $n2 . " "; 

// Third Number 
do { 
    $n3 = rand(15, 27); // this needs to be in your loop so when its the same it will generate a new number 
} while ($n3 == $n2) // your || isn't needed as it can't over lap your $n2 

echo $n3 . " "; 

// Fourth Number 
do { 
    $n4 = rand(20, 38); // this needs to be in your loop so when its the same it will generate a new number 
} while ($n4 == $n3) 

echo $n4 . " "; 

// ... repeat 

// Seventh Number 
do { 
    $bo = rand(1, 49); // this needs to be in your loop so when its the same it will generate a new number 
} while ($bo == $n1 || $bo == $n2 || $bo == $n3 || $bo == $n4 || $bo == $n5 || $bo == $n6) // use your || to check against all of your variables 

echo $bo; 

?> 
1

Не знаете, что именно вы пытаетесь сделать, но ваш последний цикл while настроен неправильно. Ниже правильнее и не даст вам бесконечный цикл.

do { 
$n3 = rand(15, 27); 
echo $n3 . " "; 
} while (($n3 == $n2) || ($n3 == $n1)); 
0

Да - Маджид прав, это всегда будет бесконечным циклом. То, что вы могли бы хотеть что-то подобное:

$previousNums = array(); 

for ($i = 0; $i < 7; $i++) 
{ 
    $try = rand(0, 49); 
    while (in_array($try, $previousNums)) { 
    // means we have already used this num, so try again 
    $try = rand(0, 49); 
    } 
    // append this num in the list of previousNums 
    $previousNums[] = $try; 

    echo ' num = ' . $try; 
} 
+0

Это будет работать, но я пересчитываю числа. Если $ n1 не равен $ n2 echo $ 1 , но если $ n1 равен $ n2 rerun rand (13,21), пока $ n2 не будет равен $ n1, тогда распечатайте его. сверху цифры не должны быть между 1 и 49 1-й номер выбирается между 1 и 12, второй - между 13 и 21. –