1

我编写此代码是为了使用比课程预期更多的 Java 元素。但我很难让它适用于所有 4 个方向。getter 和 setter 嵌入到使 Karel 移动的方法中。如果我能得到任何帮助让这条鳕鱼工作,那就太好了。

import stanford.karel.*;

public class MidpointFindingKarel extends SuperKarel {


public void run(){
    while(facingEast()){
        moveEast();
    }
    while(facingNorth()){
        moveNorth();
    }
    while(facingWest()){
        moveWest(moveEast());
    }       
    while(facingSouth()){
        moveSouth(moveNorth());
    }
}

    private int moveEast(){
        int width = 0;
        while(frontIsClear()){
            width++;
            move();
        }
        turnLeft();
        width /= 2;
        return width;
    }

    private int moveNorth(){
        int height = 0;
        while(frontIsClear()){
            height++;
            move();
        }
        turnLeft();
        height /= 2;
        return height;
    }

    private void moveWest(int _width){
        for(int _w = 0; _w < _width; _w++){
            move();
        }
        turnLeft();
    }

    private void moveSouth(int _height){
        for(int _h = 0; _h < _height; _h++){
            move();
        }
        turnLeft();
    }

}
4

1 回答 1

0

您能否具体说明一下您的代码应该做什么?如果你想做的只是在每面墙的中间放置一个蜂鸣器,我会做一个单独的方法来做到这一点。如果我的解决方案不能回答您的问题,请提前抱歉!

import stanford.karel.*;

public class MidpointFindingKarel extends SuperKarel {
public void run(){
    while(facingEast()){
        moveEast();
    }
    while(facingNorth()){
        moveNorth();
    }
    while(facingWest()){
         moveEast(); // I did not understand what "moveWest(moveEast());" was for. 
    }       
    while(facingSouth()){
        moveNorth();// I did not understand what "moveSouth(moveNorth())" was for. 
    }
}

    private void moveEast(){
        int width = 0;
        while(frontIsClear()){
            width++;
            move();
        }
        goBackPutBeeperReturn(width); // goes back half of the "width", puts beeper, returns.
        turnLeft();
       // width /= 2; 
        // return width; 
    }

    private void moveNorth(){
        int height = 0;
        while(frontIsClear()){
            height++;
            move();
        }
        goBackPutBeeperReturn(height);
        turnLeft();
       // height /= 2;
       // return height;
    }


  //Pre-condition: Karel has finished going along a wall and has its length stored somewhere. 
  //Post-condition: Karel has put a beeper in the midpoint and is back to the end of that wall
    private void goBackPutBeeperReturn(int wallLength){
           turnAround();
           for(int loop = 0 ; loop < wallLength/2 ; loop++){
            move();   
           }
           putBeeper();
           turnAround();
           for(int loop = 0 ; loop < wallLength/2 ; loop++){
                move();
       }}}

       /*
   private void moveWest(int _width){
        for(int _w = 0; _w < _width; _w++){
            move();
        }
        turnLeft();
    }

    private void moveSouth(int _height){
        for(int _h = 0; _h < _height; _h++){
            move();
        }
        turnLeft();

    }


}*/
于 2016-03-13T09:34:20.373 回答