#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()
, так что все читалось НИЗКО. Как только я сменил его на Спасибо за отзыв!