简体   繁体   中英

Issue in understanding java method

maybe I've a serious gap in java fondamental comprehension. In the code below I can't understand how getLength method can calculate walk length. Why recall itself on tail?

class Point {

    private int x;
    private int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    public static void main(String argv[]) {

        Point p1 = new Point(0, 0);
        // Walk w1 = new Right(new Down(new Left(new Up(new Stop()))));
        Move w2 = new Left(new Left(new Up(new Stop())));
        // Walk w3=new Right(new Stop());
        System.out.println(w2.tail);
    }
}

abstract class Walk {

    public abstract boolean isStop();

    public abstract int getLength();
}

class Stop extends Walk {

    @Override
    public boolean isStop() {
        return true;
    }

    @Override
    public int getLength() {
        return 0;
    }
}

abstract class Move extends Walk {

    Walk tail;


    @Override
    public int getLength() {

        return 1 + tail.getLength();
    }

    Move(Walk tail) {
        this.tail = tail;

    }

    @Override
    public boolean isStop() {
        return true;
    }
}

class Right extends Move {

    public Right(Walk tail) {

        super(tail);

    }
}

class Left extends Move {

    public Left(Walk tail) {
        super(tail);
    }
}

class Up extends Move {

    public Up(Walk tail) {
        super(tail);
    }
}

class Down extends Move {

    public Down(Walk tail) {
        super(tail);
    }
}

You appear to be creating your own linked list, and the getLength() method iterates through the entire list, returning the full sum.

As an aside, please work on your code formatting for this site, especially your indentation.

It calculates the total length, from what I can tell.

return 1+tail.getLength();

This appears to say that the current object's walk length is 1 , and it adds that to whatever tail walk length is. This gives the total length.

NOTE : Whoever wrote this, should look at the Java Naming Conventions .

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM