2014-04-27 3 views
0
I는 shapes..e 직사각형 유형 테스트 아래 PHP 사용하고

사각형 등테스트 배열 요소 평등

if($this->noOfSides == 4 && count(array_unique($this->eachSides)) == 2) { 
    $this->nameOfShape = "Rectangle"; 
} 

if($this->noOfSides == 4 && (count(array_unique($this->eachSides)) > 2)) { 
    $this->nameOfShape = "Quadrilateral (4 -Sided shape) with irregular sides"; 
} 

직사각형 경우 - 2 개면은 각각 동일한 예 4, 4, 6, 6의 첫 번째 부분이다 코드가 적용되지만 3, 3, 3, 4과 같은 값을 입력하면 사각형이 두 번째 블록이 아닌 다시 반향됩니다.

어떻게하면됩니까?

+0

3, 3, 3, 4_과 같은 값을 무엇을 의미합니까? 어디서 그걸 입력합니까? – putvande

+3

두 경우 모두 2 개의 고유 값 (4,6)과 (3,4)가 있기 때문입니다. – Gustek

+0

@putvande 계산하려는면의 번호를 입력 할 수있는 텍스트 상자가 있습니다. 따라서 '3, 3, 3, 4'는 모양의 변 (길이)입니다. – hello

답변

1

어떻게 코드를 약간 단순화 어떻습니까?

if(count($this->sides) == 4) { 
    if($this->sides[0] == $this->sides[2] && $this->sides[1] == $this->sides[3]) 
      $this->nameOfShape = "Rectangle"; # actually, 'parallelogram' 
    else 
      $this->nameOfShape = "Quadrilateral (4 -Sided shape) with irregular sides"; 
} 

모양의 다른 유형을 감지하려면, 당신은 측면과 함께 추가 시험도 시험 각도를 작성하는거야 :

 if($this->sides[0] == $this->sides[2] && $this->sides[1] == $this->sides[3]) 
      $this->nameOfShape = "Parallelogram"; # can be rectangle, rhombus, square... 
    else if($this->sides[0] == $this->sides[1] && $this->sides[2] == $this->sides[3]) 
      $this->nameOfShape = "Kite"; 
    else 
      $this->nameOfShape # irregular or trapezoid... 

이 모양의 인접면이 함께 저장되어 있다고 가정합니다 :

  1 
    +----------------+ 
    |    | 
0 |    | 2 
    |    | 
    +----------------+ 
      3 
+2

입력이 '4, 4, 6, 6'이면 불규칙한 모양이됩니다. – putvande

+0

@putvande 코드가 좋으면 4,4,6,6 *는 불규칙한 모양을 주어야합니다 ... ps : 질문에 대한 내 의견을 역시 –

+0

@putvande : 코드에 더 많은 테스트를 추가했습니다. – georg

1
대신 array_unique 사용 array_count_values

그러나 단지 광장/사각형이 기능 검사의 반환 값을 사용하여 코드에서 그것을 대체하지 않으며, 만약 사실이 아니다, 그럼 다른 사람에 당신은 사각형이있다.

array(
    '3' => 3, 
    '4' => 1, 
} 
: 당신이 2

array_count_values

3, 3, 3, 4를 반환하는 구형, 값이 키 값 4 하나의 키를 가지고 있어야 평방를 들어

및 4, 4, 6, 6 :

array(
    '4' => 2, 
    '6' => 2, 
) 
+2

OP가 이것을 어떻게 사용하는지 설명 할 수 있습니까? 이것은 다른 배열을 반환하기 때문입니다. – putvande

+1

코드를 사용할 준비가되어 있다면 프로그래밍에 대해 어떻게 배울 수 있을까요 ?? 그것에 대해 조금 생각해보십시오. 설명서를 읽을 시간이 충분하지 않았습니다 .... –

+0

나는 여전히 같은 결과를 얻는다. 길이가 '3, 3, 3, 4'인 모양은 여전히 ​​Rectangle을 반환합니다. 나는이'count (array_count_values ​​($ this-> eachSides))> 2)' – hello

0

정렬 값은 1 == 2 & & 3 == 4 일 확인.

+0

모양의 길이가 '4,4,6,6'의 순서 인 경우이 사각형이 아닙니다. – hello

+0

@ dotman14 : 질문이 명확하게 지정되어 있지는 않지만 질문에 사각형이라고 말하면 순서가 중요하지 않다고 가정합니다. 그래서 내가 할 수 정렬 ... 당신의 마음을 확인하십시오. –