0

Queue全体を反転するクラスのメソッドを作成しようとしていQueueます。プログラムを実行すると、次の問題が発生します。

タイプ Queue のオブジェクトをオンラインの配列として使用できませんecho($i.". ".$this->kolejka[$i-1]."<br>");

どうやら彼がprintOut反転したメソッドを再び使用しようとしているときのようQueueです。助けてください!

私はこれを機能させるために多くのことを試みましたが、道に迷ったので、笑わないでください。

コード全体は次のとおりです。

<?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();
?>
4

2 に答える 2

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

これは、次の 2 つの方法のいずれかで解決できます。

  1. に設定$this->Queue$newQueue->Queueます(おそらく非プライベート変数にする必要があります)
  2. 一時的な配列を作成する代わりに、その場で配列を反転する方法を学ぶ
于 2013-06-11T17:49:56.480 に答える
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/>';
    }
}
于 2014-11-05T19:57:06.053 に答える