0

我需要在 php 中编写一个 Player 类,该类适用于我不允许更改的函数。我必须以该函数将返回最大值的方式编写此类。我只能使用 1-10 之间的整数。我只在这里复制了有问题的部分:

function CalcPlayerPoints($Player) {

$Points = 0;

    foreach($Player as $key => $Value) {

    switch ($key) {
    case "profyears":
        if($Value===true) // this should be true
        $Points+=($Value*5); // this should take tha value I give in the class construct
        break;
    case "gentleman":
        if($Value===true) 
        $Points+=10;                
        break;
    }
   }
return $Points; // that should be maximized
}

由于我无法更改 === 比较,因此我无法初始化 profyears 属性。如果我用 10 初始化,那么它不会进入 if 语句...

public function __construct() {
   $this->gentleman = true;
   $this->profyears = 10;  
}
4

3 回答 3

0

这个函数允许的唯一选项是 profyears 是一个布尔值,所以是真或假。没有其他选择可能。

因此,该类处理 profyears 不是作为年数,而是作为是否有 profyears。所以你 __construct 中唯一正确的值是真或假。这可能是一个奇怪的命名转换。如果它命名是有意义的:例如 hasProfYears。

一些例子:
一位有专业的绅士给出: 15 分。
有专业的非绅士给5分。
没有专业的绅士给10分。
没有专业的非绅士得0分。

于 2012-01-30T18:06:28.947 回答
0

此功能无法按创建者的预期工作。该$Value变量被评估为严格的布尔值,但随后对其进行了数学运算。不修改原来的功能是没有办法解决这个问题的。

此外,似乎缺少一个右括号。

调用的函数如下:

function index()
{
   var_dump( $this->CalcPlayerPoints(array( 'profyears' => 10 )) );
}

function CalcPlayerPoints($Player) {

  $Points = 0;

     foreach($Player as $key => $Value) {

        switch ($key) {
            case "profyears":
                if($Value===true) // this should be true
                $Points+=($Value*5); // this should take tha value I give in the class construct
                break;
            case "gentleman":
                if($Value===true) 
                $Points+=10;                
                break;

        }
     }
return $Points; // that should be maximized
}

int 0无论您提供什么整数值,每次都会显示。如果可以修改原始函数以消除严格比较,例如:

function index()
{
   var_dump( $this->CalcPlayerPoints(array( 'profyears' => 10 )) );
}

function CalcPlayerPoints($Player) {

  $Points = 0;

     foreach($Player as $key => $Value) {

        switch ($key) {
            case "profyears":
                if($Value==true) // this should be true
                $Points+=($Value*5); // this should take tha value I give in the class construct
                break;
            case "gentleman":
                if($Value==true) 
                $Points+=10;                
                break;

        }
     }
return $Points; // that should be maximized
}

该函数将返回预期结果:int 50

于 2012-01-30T18:09:05.087 回答
0

似乎 CalcPlayerPoints 函数有一个错误,因为这样做很有意义:

if ($Value === true)
    $Points += $Value * 5;

即,“TRUE 乘以 5”没有任何意义。

于 2012-01-30T18:13:02.607 回答