stanford编程方法学karel作业一problem1

这两天准备把java的基础重新看一下,刚好看到之前只看了一个开头的斯坦福的编程方法学的视频,于是就重新开始从头看起。

刚看了第一章,收获还是蛮大的。老师讲到编程的重点不在于语言,而在于思想。好比一个人只知道语言的词汇和语法,他是无法写出好文章的。所以,老师利用一个小的工具--karel来让同学入门,着重于编程的思想,不让java的语言特性分心。不得不说,斯坦福的教学理念确实很先进。

在老师的例子中,强调的是自顶向下的设计方法,要完成一个任务,需要将一个大任务分解为一个一个的小任务,再将小任务继续分解,直到每个任务都解决一个问题为止

  • solve a problem
  • methods (1-15 lines)
  • good names
  • comments

以下是karel编程第一题的解决方法

/*
 * File: CollectNewspaperKarel.java
 * --------------------------------
 * At present, the CollectNewspaperKarel subclass does nothing.
 * Your job in the assignment is to add the necessary code to
 * instruct Karel to walk to the door of its house, pick up the
 * newspaper (represented by a beeper, of course), and then return
 * to its initial position in the upper left corner of the house.
 * 
 * author:zhendongYi
 * 2016/06/27
 */    
import stanford.karel.*;
public class CollectNewspaperKarel extends SuperKarel {

  /*
   * 主方法
   * @see stanford.karel.SuperKarel#run()
   */
  public void run(){
      CollectNewspaper();       //取报纸
      GoBack();             //返回
  }

  /*
   * 取报纸
   */
  private void CollectNewspaper() {
      GoWithFloor();            //沿着天花板走
      GoWithWall();         //沿着墙走
      PickNewspaper();      //捡报纸
  }

  /*
   * 沿着墙走
   */
  private void GoWithWall() {
      while(leftIsBlocked()){       //前进
          move();
      }
      turnLeft();                   //右转
  }

  /*
   * 沿着天花板走
   */
  private void GoWithFloor() {
      while(frontIsClear()){    //前进
          move();
      }
      turnRight();              //右转
  }

  private void PickNewspaper() {
      move();
      pickBeeper();
  }

  private void GoBack() {
      turnAround();
      while(frontIsClear()){
          move();
      }
      turnRight();
      move();   
  }
}

你可能感兴趣的:(stanford编程方法学karel作业一problem1)