Почему значение newPriority, установленное методом setPriority, не передается в переменную newPriority?

#java

Вопрос:

Я создаю программу, в которой задачи добавляются в драйвер, эти задачи помещаются в класс задач, где он обрабатывает приоритет для каждой задачи с помощью метода setPriority (оператор if). В конце оператора if есть возвращаемое значение newPriority. Это не работает, потому что, когда я запускаю, он все еще выводит первую переменную, объявленную для newPriority. Когда я указываю возвращаемое значение newPriority в конце оператора if, сбрасывается ли переменная в классе? Почему я не могу получить доступ к новой переменной? Поскольку каждая задача, указанная в драйвере, проходит через методы, она изменит переменную? Это и есть полиморфизм?

 public class Task implements Priority {

    //variables
    private String tasks = "";
    private int priority = 0;
    private String newPriority = "didn't work";
    
    //set variables
    public Task(String tasks, int priority) {
        this.tasks = tasks;
        this.priority = priority; 
    }

    //get task 
    public String getTask() {
        return tasks;
    }
    
    //use from the Priority interface getPriority
    @Override
    public int getPriority() {
        return priority;
    }
    
    //use from the Priority interface setPriority
    //if statement to change int priority to newPriority
    @Override
    public String setPriority(int priority) {
        if (priority >= 3) {
            newPriority = ("LOW");
        } else if (priority >= 4 amp;amp; priority <= 7) {
            newPriority = ("MED");
        } else if (priority >=8) {
            newPriority = ("HIGH");
        } else {
            newPriority = ("There is no priority set");
        }
        return newPriority;
    }
    
    //return task and new Priority
    public String ranking() {
        return "Task: "   tasks   "--> Priority: "   newPriority;
    }

}
 
 public class Driver {

    public static void main(String[] args) {
        //tasks listed
        Task[] tasks = new Task[4];

        tasks[0] = new Task( "biking", 3 );
        tasks[1] = new Task( "school work", 9 );
        tasks[2] = new Task( "taxes", 10 );
        tasks[3] = new Task( "cooking", 5 );
        //call method from end of Tasks class to print end result
        //task.ranking();
        
        //iterate over tasks
        for ( int j=0; j <= 4; j   )
            System.out.println( tasks[j].ranking());
    
        //the new list of tasks is put in order        
    }

}
 

Комментарии:

1. Ваш сеттер не изменяет this.priority поле.

2. Кстати.: priority >= 3 скорее всего, так и должно быть priority <= 3 .

3. Куда именно вы звоните setPriority ?

4. Почему у вас есть setPriority() метод, который ничего не устанавливает?

5. значение setPriority проходит через оператор if и возвращает значение LOW, MED или HIGH. Затем он считывает, в чем заключается Задача и в каком приоритете она находится.

Ответ №1:

Вместо того, чтобы позвонить ranking() в класс водителей, я позвонил setPriority() . Я изменил setPriority() так, чтобы возвращаемая строка была той же, что и возвращаемая строка ranking() , поэтому я мог избавиться от ранжирования. Сначала это все еще не работало, потому что, как следует из комментария выше, у меня был приоритет >= 3 в> setPriority() , так что все читалось НИЗКО. Как только я сменил его на Спасибо за отзыв!