2012-01-30 15 views
0

私は、変更が許可されていない関数で動作するPHPのPlayerクラスを記述する必要があります。私は、この関数が最大値を返すようにこのクラスを書く必要があります。私は1-10の間の整数しか使用できません。私はここでしか問題の一部をコピーした:私は===比較を変更傾けるのでPHPでの厳密な比較

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; 
} 
+1

あなたの質問は何ですか? – Crontab

+2

$ value === trueの場合、どのように通訳者にこれを5倍すると思いますか? – JConstantine

+0

'CalcPlayerPoints'はどのように呼び出されますか? –

答えて

0

唯一のオプションはprofyearsがそうtrueまたはfalse、ブール値であるということです。可能な他のオプションはありません。

クラスはprofyearsを年数としてではなく、profyearsがあるかどうかのように扱います。したがって、__constructの正しい値はtrueまたはfalseです。これは奇妙な名前変換になります。 hasProfYearsのように名前を付けると意味があります。

いくつかの例:
profyearsのある紳士は次のように答えます。
profyearsを持つ非紳士は5点を与えます。
profyearsのない紳士は10点を与えます。
profyearsのない非紳士は0点を与えます。

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

+0

関数は、配列ではなくオブジェクトへの参照を期待していることを言及する価値があると考えてください。 –

+0

問題の機能は区別されません。 OPはそれをこのように使用しているようですが、配列はこの関数の完全に有効なパラメータであり、テストのためには十分です。 –

+0

これが言及されていない場合、あなたは正しいでしょう: *問題のある部分のみをここにコピーしました* これはこのトピックの冒頭で言及しました。また、$ Playerは通常はオブジェクトを示す大文字のPで始まります。だから、私たちがここで見ていない部分に影響を与えるかもしれない、それは、それについての後の問題を防ぐために、私が注意した理由です。 –

0

それがこれを行うに感知することができますように、CalcPlayerPoints機能にバグがあるようです:

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

つまり、「TRUE回5」は何も意味しません。

関連する問題