1

私はコンピュータサイエンスのクラスに所属しており、JavaOOPの概要としてロボットのカレルを使用することから始めました。2つの異なるタスクを実行して、2つのKareltheRobotsを同時に実行したいと思います。インターネットで解決策を探してみましたが、動作するスレッドを作成することに成功しましたが、2台のKareltheRobotsを同時に実行することはできません。この並行プログラミングの問題についての助けをいただければ幸いです。これが私が使用しているコードです:

package karel;
import kareltherobot.*;
import kareltherobot.Directions;
import kareltherobot.World;
public class KarelSample implements Directions
{
    public static void main(String [] args)  
    {


          Thread Karelrunner = new Thread();
          Karelrunner.start();
 UrRobot Karel = new UrRobot ( 1,5, North, 2);
 Karel.move();
 Karel.move();
 Karel.putBeeper();
 Karel.turnLeft();
 Karel.move();


}




    static
    {   
    World.setVisible(true);
    World.showSpeedControl(true);



}


    class Karelrunner implements Directions {

        UrRobot Karel2 = new UrRobot(8,8, South, 2);
        Karel2.move();
        Karel2.move();
        Karel2.turnLeft();
        Karel2.turnLeft();
        Karel2.putBeeper();
        Karel2.move();
}



}

また、Karel J Robotの本の例を使用しました。この例では、スレッド設定コードは次のようになります。

public static void main (String [] args)
{ ...

Karelrunner r = new Karelrunner();
World.setupThread(r);

  . . .
}

できる限り助けてください、私はマルチスレッドの並行プログラムを作ろうとしています。私はこれに不慣れであり、あなたの時間と注意に感謝します。

4

2 に答える 2

0

スレッド化について考える代わりに、アクション間の遅延の設定を検討する方が役立つでしょう。擬似コードの例:

create karel_one
create karel_two
while(true){
setdelay(0)
karel_one.act()
karel_two.act()
setdelay(10) // or whatever
}

したがって、それらが同時に動作しているように見えます。私は数年前にこれを行いましたが、(おそらく想像できるように)karelロボットは教室の外ではあまり役に立たないので、詳細は覚えていません。遅延法は世界の一部かもしれないと思いますか?わからない。

編集:このアイデアを使用して、左に3回曲がるのを永遠に待つ代わりに、turnRight()のような「インスタント」関数を作成することもできます。

于 2012-09-02T04:39:47.590 に答える
0

私はさらに調査を行い、問題の解決策を見つけました。アイデアをくれたkevinsa5に感謝します。Karel the Robotまたは一般的なマルチスレッドで問題が発生する可能性がある場合は、以下にコードを投稿します。うまくいけば、それはあなたにアイデアを与えるのに役立つでしょう。

package karel;
import kareltherobot.*;
import kareltherobot.Directions;
import kareltherobot.World;
public class KarelSample implements Directions
{
    public static void main(String [] args)  
    {
        new Karelrunner(8,8,South,2); 

        UrRobot Karel = new UrRobot (1,3,North,2);

        Karel.move();
        Karel.move();
        Karel.putBeeper();
        Karel.move();
        Karel.turnLeft();
        Karel.move();
    }   

    static
    {   
        World.setVisible(true);
        World.showSpeedControl(true);
    }
}

class Karelrunner extends UrRobot implements Directions 
{
    public Karelrunner (int street, int avenue, Direction direction, int beepers)
    { 
        super ( street, avenue, direction, beepers);
        World.setupThread(this);
    }

    public void run()
    {
        move();
        move();
        putBeeper();
        turnLeft();
        move();
    }
}   
于 2012-09-03T18:13:58.373 に答える