stanford編程方法學(xué)karel作業(yè)一problem1

這兩天準(zhǔn)備把java的基礎(chǔ)重新看一下,剛好看到之前只看了一個(gè)開(kāi)頭的斯坦福的編程方法學(xué)的視頻,于是就重新開(kāi)始從頭看起。

剛看了第一章,收獲還是蠻大的。老師講到編程的重點(diǎn)不在于語(yǔ)言,而在于思想。好比一個(gè)人只知道語(yǔ)言的詞匯和語(yǔ)法,他是無(wú)法寫(xiě)出好文章的。所以,老師利用一個(gè)小的工具--karel來(lái)讓同學(xué)入門(mén),著重于編程的思想,不讓java的語(yǔ)言特性分心。不得不說(shuō),斯坦福的教學(xué)理念確實(shí)很先進(jìn)。

在老師的例子中,強(qiáng)調(diào)的是自頂向下的設(shè)計(jì)方法,要完成一個(gè)任務(wù),需要將一個(gè)大任務(wù)分解為一個(gè)一個(gè)的小任務(wù),再將小任務(wù)繼續(xù)分解,直到每個(gè)任務(wù)都解決一個(gè)問(wèn)題為止

  • 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();       //取報(bào)紙
      GoBack();             //返回
  }

  /*
   * 取報(bào)紙
   */
  private void CollectNewspaper() {
      GoWithFloor();            //沿著天花板走
      GoWithWall();         //沿著墻走
      PickNewspaper();      //撿報(bào)紙
  }

  /*
   * 沿著墻走
   */
  private void GoWithWall() {
      while(leftIsBlocked()){       //前進(jìn)
          move();
      }
      turnLeft();                   //右轉(zhuǎn)
  }

  /*
   * 沿著天花板走
   */
  private void GoWithFloor() {
      while(frontIsClear()){    //前進(jìn)
          move();
      }
      turnRight();              //右轉(zhuǎn)
  }

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

  private void GoBack() {
      turnAround();
      while(frontIsClear()){
          move();
      }
      turnRight();
      move();   
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,267評(píng)論 25 708
  • 計(jì)算機(jī)編程語(yǔ)言可用于將指令傳達(dá)給計(jì)算機(jī)。它們基于某些句法和語(yǔ)義規(guī)則,定義了編程語(yǔ)言中每種結(jié)構(gòu)的含義。 現(xiàn)在我得到了...
    幻凌風(fēng)閱讀 8,578評(píng)論 1 26
  • 睡前 “抱抱” “不要” “為什么?” “太熱了” “所以冬天就可以嗎?” “是的” “你根本不愛(ài)我,你愛(ài)的只是我...
    捍道閱讀 194評(píng)論 0 1

友情鏈接更多精彩內(nèi)容