2013-06-11 63 views
0

我試圖寫一個方法Queue反轉類Queue。運行程序後,它給出瞭如下問題:當他試圖在倒置Queue再次使用printOut方法PHP隊列類問題

不能聯機使用類型隊列的對象數組echo($i.". ".$this->kolejka[$i-1]."<br>");

顯然。請幫忙!

請不要笑(太難),因爲我嘗試了很多事情來使這項工作,我迷路了。

這裏是整個代碼:

<?php 
class Queue 
{ 
private $Queue = array(); //Init 

public function clear() //Clears the Queue 
{ 
    $this->Queue = array(); 
} 


public function isMember($item) //Returns True if element is in the Queue 
{ 
    foreach($this->Queue as $x) 
    { 
     if($item === $x) 
     { 

      return true; 
     } 
    } 
    return false; 
} 


public function remove() //Removes first element 
{ 
    return array_shift($this->Queue); 
} 


public function add($item) //Adds element to the end 
{ 
    $this->Queue[] = $item; 
} 


public function first() //Returns the first element 
{ 
    return current($this->Queue); 
} 

public function printOut() //Writes down in order all the elements 
{ 
    for($i=1;$i < count($this->Queue)+1;$i++) 
    { 
    echo($i.". ".$this->Queue[$i-1]."<br>"); 
    } 

} 

    public function length() //Returnts length 
{ 
    return count($this->Queue); 
} 

public function invert() //Reverts the Queue 
{ 
    $newQueue = new Queue(); 
    for ($i = $this->length() - 1;$i>=0;$i--) 
    { 
    $newQueue->add($this->first()); 
    $this->remove(); 
    } 
    $this->Queue = $newQueue; 
} 

} 

$kolej = new Queue(); 
$kolej->add("Apple"); 
$kolej->add("Orange"); 
$kolej->add("Banana"); 
$kolej->add("Mandarin"); 
$kolej->add("Raspberry"); 
echo $kolej->first()."<br>"; 
$kolej->remove(); 
echo $kolej->first()."<br>"; 
echo $kolej->isMember("Apple")."<br>"; 
echo $kolej->isMember("Orange")."<br>"; 
$kolej->printOut(); 
echo "Currently Queue is of length ".$kolej->length()."<br>"; 
$kolej->invert(); 
$kolej->printOut(); 
?> 

回答

0

invert()功能做了錯誤的事情。 $this->Queue應該是一個數組:

private $Queue = array(); //Init 

,但在功能結束時,您將它設置爲一個對象(命名爲$newQueue):

public function invert() //Reverts the Queue 
{ 
    $newQueue = new Queue(); 
    for ($i = $this->length() - 1;$i>=0;$i--) 
    { 
    $newQueue->add($this->first()); 
    $this->remove(); 
    } 
    $this->Queue = $newQueue; 
} 

您可以通過以下兩種一個解決這個問題方法:

  1. $this->Queue$newQueue->Queue(你可能要使它成爲一個非私有變量)
  2. 瞭解如何使用invert an array in place而不是創建臨時數組
+0

非常感謝,現在我明白了。除此之外,我還看到了算法的另一個重要問題。該方法不會恢復它,而是完全複製它。現在它已經修復了。再次感謝:-) –

+0

不客氣!在將來,如果您發現答案有用,那麼您可以通過點擊旁邊的向上箭頭進行投票,或者您可以單擊小號複選框將其標記爲接受的問題答案。 –

0

這裏是固定方法的反轉方法。我希望這有幫助。

//Reverts the Queue 
public function invert() { 
    $newQueue = array(); 
    for ($i = 0; $i < count($this->Queue) + 1; $i++) { 
     $newQueue[$i] = $this->Queue[count($this->Queue) - 1 - $i]; 
     echo $newQueue[$i] . '<br/>'; 
    } 
}