Как установить местоположение, если ноль OOP - PullRequest
2 голосов
/ 09 марта 2020

Как я могу получить это, чтобы напечатать слова "весь дом", если местоположение не было введено изначально. Я думаю, что это не работает, потому что, когда задача создана, она использует конструктор, который не имеет инструкций для определения местоположения. Есть ли способ получить местоположение, которое будет изменено с нуля на указанную мной строку?

Вот мой класс задач:

public class Task{

    private final String choreName; 
    private final int maxCompletionInMinutes;
    private final String difficulty;
    private String location;

    public Task(String choreName, int maxCompletionInMinutes, String difficulty){
       this.choreName = choreName;
       this.maxCompletionInMinutes = maxCompletionInMinutes;
       this.difficulty = difficulty;
    }

    public Task(String choreName, int maxCompletionInMinutes, String difficulty, String location){
       this(choreName, maxCompletionInMinutes, difficulty);
       this.location = location;
    }

    public String getChoreName(){
        return choreName; 
    }    
    public int getMaxCompletionInMinutes(){
        return maxCompletionInMinutes;
    }
    public String getDifficulty(){
        return difficulty;
    }
    public String getLocation(){
        return location;
    }

    public void setLocation(String location){
        if(location == null)
        location = "Whole house";

        this.location = location;
    }

    public void prettyPrint(){
        System.out.printf("Complete the chore: %s (%s) in location: %s. This chore should take a maximum of %d minutes.%n", choreName, difficulty, location, maxCompletionInMinutes);
    }

}

Вот мой класс драйверов:

public class Assignment5{
    public static void main (String[] args){
        Task task1 = new Task("Dishes", 40, "Hard", "Kitchen");
        Task task2 = new Task("Dust", 45, "Hard");
        Task task3 = new Task("Vacuum", 30, "Medium");
        Task task4 = new Task("Make beds", 15, "Easy");
        Task task5 = new Task("Water plants", 15, "Easy", "Living Room");

        task1.prettyPrint();
        task2.prettyPrint();
        task3.prettyPrint();
        task4.prettyPrint();
        task5.prettyPrint();
    }

}

1 Ответ

3 голосов
/ 09 марта 2020

Я бы, наверное, просто переключил упорядочение конструкторов. Сделайте так, чтобы конструктор с тремя аргументами вызывал конструктор с четырьмя аргументами и предоставлял значение по умолчанию:

public Task(String choreName, int maxCompletionInMinutes, String difficulty) {
   this(choreName, maxCompletionInMinutes, difficulty, "Whole house");
}

public Task(String choreName, int maxCompletionInMinutes, String difficulty, String location) {
   this.choreName = choreName;
   this.maxCompletionInMinutes = maxCompletionInMinutes;
   this.difficulty = difficulty;
   this.location = location;
}

Затем просто удалите ноль проверочных логи c в установщике.

Это также хорошо, потому что теперь вы также можете сделать location финальным полем, сделав класс Task неизменным и поточно-ориентированным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...