斯坦福大学公开课 编程方法学 Karel the Robot 寻找中点问题解决

斯坦福大学公开课的《 编程方法学》是学习Java很好的课程,课程开始是学习Karel,本文是作业MidpointFindingKarel的解决方案,运行结果如下:

思路是先确定方块的总数,然后将方块依次减半直到方块为1,即为找到中点。代码如下:

 

import stanford.karel.*;

public class MidpointFindingKarel extends SuperKarel {
	public void run() {
		createBeeperLine();
		collectAllBeeper();
		putBeeperToCentre();
	}

	private void createBeeperLine() {
		while (frontIsClear()) {
			putBeeper();
			move();
		}
		putBeeper();
	}

	private void collectAllBeeper() {
		while (frontIsBlocked() && facingEast()) {
			turnAround();
			move();
			while (frontIsClear()) {
				pickBeeperToBack();
				while (noBeepersPresent() && frontIsClear()) {
					move();
				}
			}
			pickBeeperToBack();
		}
		while (frontIsBlocked() && facingWest()) {
			turnAround();
			while (frontIsClear()) {
				move();
			}
		}
	}

	private void pickBeeperToBack() {
		while (beepersPresent() && facingWest()) {
			pickBeeper();
			turnAround();
			while (frontIsClear()) {
				move();
			}
			putBeeper();
		}
	}

	private void putBeeperToCentre() {
		while (beepersPresent()) {
			decreaseHalfBeeper();
			turnAround();
			move();
			turnAround();
		}
		putBeeper();
	}

	private void decreaseHalfBeeper() {
		while (beepersPresent() && facingEast()) {
			pickBeeper();
			turnAround();
			move();
			turnAround();
			move();
			if (beepersPresent()) {
				pickBeeper();
				turnAround();
				move();
				putBeeper();
				turnAround();
				move();
			}
		}
	}
}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fun_He

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值