2012-01-30 2 views
0

필자는 변경이 허용되지 않는 함수로 작동하는 Player 클래스를 PHP로 작성해야합니다. 이 함수가 최대 값을 반환하는 방식으로이 클래스를 작성해야한다. 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로 초기화 할 경우 문 있다면, 그것은이 기능이 있습니다

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

무엇이 당신의 질문입니까? – Crontab

+2

$ value === true 일 경우, 통역사가 이것을 어떻게 5 배로 늘리 길 기대합니까? – JConstantine

+0

'CalcPlayerPoints'는 어떻게 불려지나요? –

답변

0

유일한 옵션은 profyears 그래서 참 또는 거짓, 부울 때문이다 ... 입력하지 않습니다. 가능한 다른 옵션이 없습니다.

그래서 수업에서는 교수가 아닌 교수가 있는지 아닌지와 같이 년이 아닌 profyears를 처리합니다. 따라서 __construct에서 올바른 값은 true 또는 false입니다. 이것은 이상한 명명 변환 일 수 있습니다. 예를 들어, hasProfYears와 같이 이름을 붙이면 의미가 있습니다.

몇 가지 예 :
profyears가있는 신사가 제공하는 점수는 15 점입니다.
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 times 5"는 아무 것도 의미하지 않습니다.