цикл do-while запускается только один раз - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь сделать простой цикл while, используя класс для получения факториала числа.Однако по какой-то причине цикл while возвращает значение только после однократного запуска.

Вот мой код:

<?php
    class Factorial {
      public function calculate($int){
             $intStep = $int-1;
                     do {
                        $int*=$intStep;
                        $int--;
                        return $int;
                       } while($int>0);    
              if (!is_int($int)){
                 echo "entry is not a number";
                 }
              }
            }

$factorial = new Factorial;
echo $factorial->calculate(5);

Ответы [ 4 ]

0 голосов
/ 13 декабря 2018

Факториал?Возможно, вам нужен следующий код:

Не забывайте отрицательные числа.

class Factorial {

    public function calculate ($int) {
        if (!is_int($int)) {
            echo "entry is not a number";
        }
        if ($int == 0 || $int == 1) {
            $result = 1;
        } else if ($int < 0) {
            $result = $this->calculate($int + 1) * $int;
        } else {
            $result = $this->calculate($int - 1) * $int;
        }
        return $result;
    }
}

$factorial = new Factorial;
echo $factorial->calculate(-4);
0 голосов
/ 13 декабря 2018

Я вижу ряд проблем с вашим кодом:

  1. return $int; запускается внутри цикла do while, что означает, что он будет выполняться только один раз.
  2. YouВы уменьшаете $int вместо $intStep
  3. Вы проверяете, находится ли $int ниже нуля вместо $intStep

Вот ваш код со всеми этими проблемамиисправлено, работает и возвращает 15:

class Factorial {

    public function calculate ($int) {
        if (!is_int($int)) {
            echo "entry is not a number";
        }
        $intStep = $int - 1;
        do {
            $int += $intStep;
            $intStep--;
        } while ($intStep > 0);
        return $int;
    }
}

$factorial = new Factorial;
echo $factorial->calculate(5);

3v4l.org demo

0 голосов
/ 13 декабря 2018

попробуйте

 <?php
            class Factorial {
              public function calculate($num){
          $Factorial = 1;
          $i =1;
                             do{
                              $Factorial *= $i;
                              $i++;
                            }while($i<=$num);
                          return $Factorial;     

                      }
                    }
        $factorial = new Factorial;
        echo $factorial->calculate(5);
?>
0 голосов
/ 13 декабря 2018

Вы не должны возвращаться из своей функции, пока ваш результат не будет готов.Поскольку вы вернетесь рано, вы не закончите свои вычисления.

В целом, ваша жизнь будет проще, если вы научитесь отлаживать.Для PHP самым простым способом было бы echo заполнить весь код.Если вы поместите echo $int внутри цикла, для вас будет более очевидно, в чем проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...