函数嵌套

时间:2015-06-18 06:16:08

标签: java karel

我参加了在线课程"编程方法"可在iTunes U. 该课程将介绍" Karel the robot"基于Java,它为我提出了一个问题。以此代码为例:

import stanford.karel.*;

public class MidpointFindingKarel extends SuperKarel {

    // You fill in this part
    public void run(){
        fillBeepers();
        turnAround();
        move();
        checkWestEdge();


    }
    private void fillBeepers(){
        move();
        while(frontIsClear()){
            putBeeper();
            move();
        }
    }
    private void checkEastEdge(){
        while(beepersPresent()){
            move();
        }
            if(noBeepersPresent()){
                turnAround();
                move();
                if(beepersPresent()){
                    pickBeeper();
                    move();
                    checkWestEdge();
                }
                else putBeeper();
            }
    }
    private void checkWestEdge(){
        while(beepersPresent()){
            move();
        }
            if(noBeepersPresent()){
                turnAround();
                move();
                if(beepersPresent())
                {
                    pickBeeper();
                    move();
                    checkEastEdge();
                }
                else putBeeper();
            }
    }
}

这段代码的想法是通过放置" beepers"来找到屏幕的中间位置。除了边缘之外,然后占据蜂鸣器的边缘。 我所做的就是让每个人找到优势并且#34;函数调用另一个函数来查找另一个边。 它最终达到了中间的位置,它检查左右两侧的蜂鸣器,看不到它们,并将一个放在中间。

现在我想问:我经常会嵌套函数(或方法?你怎么称呼它们)。这是一个程序员的坏习惯,在更大,更复杂的项目中,它会回到我身边吗?它会降低我的代码的可读性吗?如果是这样,任何人都可以提供如何调用这些函数的解决方案吗?

1 个答案:

答案 0 :(得分:2)

从其他方法调用方法不仅是可接受的实践,它也是godd one。 (重用代码是一种很好的做法)。但是,在您的代码中,检查西部和检查东部大多是重复。我会像这样构建它

private void checkEdge(String orientation){
    while(beepersPresent()){
        move();
    }
        if(noBeepersPresent()){
            turnAround();
            move();
            if(beepersPresent()){
                pickBeeper();
                move();
                orientation = orientation.equals("west") ? "east" : "west";
                checkEdge(orientation);
            else putBeeper();
        }
}

通过这种方式,您可以使用一种检查边缘并且能够检查西部和东部的方法