这两天准备把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();
}
}