Search code examples
javamethodscall

Varying the order of method calling for different instances of a class


What is the best way of manipulating the order things are done based on some conditions (other than writing them again with the different order)?

Let's say there is a Person class and each object of Person represents a different human.

class Person{
    int eatingPriority = 3;
    int sleepingPriority = 2;
    int recreationPriority = 1;

    void eat() {/*eats*/}
    void sleep() {/*sleeps*/}
    void watchTv() {/*watches tv*/}

    void satisfyNeeds() {
        //HOW TO DO THIS
    }
}

How can I make the satisfyNeeds() methods call the other three methods based on their priority?

Note: I want to make it clear that priorities can change from Person to Person.


Solution

  • You can use this code

    import java.util.Arrays;  // must be imported
    int[] priorities = {sleepPriority, eatPriority, recreationPriority};
    Arrays.sort(priorities);
    for (int i=priorities.length-1; 0<=i; i--) {
        int priority = priorities[i];
        if (priority == sleepingPriority) { sleep(); }
        if (priority == eatingPriority) { eat(); }
        if (priority == recreationPriority) { watchTv(); }
    }
    

    Basically, it puts the priorities in an array, sorts the array and runs a for loop on it to run the functions.