Определите, является ли задача более ранней, зная только, была ли дата более ранней, а время - раньше - PullRequest
0 голосов
/ 06 мая 2018

Класс с именем Время содержит метод isEarlier(Time): boolean, который возвращает true, если Время раньше, чем объект Время , переданный в качестве аргумента. в противном случае возвращается false.

Второй класс с именем Date содержит аналогичный метод isEarlier(Date): boolean, который возвращает true, если Date раньше, чем объект Date , переданный как аргумент, в противном случае он возвращает false.

Третий класс с именем Задача имеет два поля данных Date date и Time time. Этот класс также содержит метод с именем isEarlier(Task): boolean, который возвращает true, если Task запланирован раньше, чем Task , переданный в качестве аргумента. Как этот метод может определить, является ли задача более ранней, используя только методы isEalier() из Time и Date object ?

Я не думаю, что это даже возможно, если не знать, совпадают ли даты, что невозможно, потому что метод isEarlier() возвращает только true или false. Я прав?

Это скорее вопрос логики, чем вопрос, связанный с конкретным языком.

public boolean isEarlier(Task argTask) {
    if (date.isEarlier(argTask.date)) {
        return true; // date is earlier
    } else if ("Is this possible without equality comparison here?")
        // date is the same, so we must also check the time
        return time.isEarlier(argTask.time);
    } else {
        return false; // date is later
    }
}

Ответы [ 2 ]

0 голосов
/ 06 мая 2018

Вы правы, вам нужно сравнить время, если даты совпадают, но сейчас нет способа узнать, так ли это.

Если вам нужен оператор if if else без сравнения на равенство, вы можете просто заполнить true, но ваш оператор else никогда не будет выполнен в этом случае.

0 голосов
/ 06 мая 2018

Без методов сравнения на равенство в ваших временных классах вы также должны будете выполнить обратное сравнение, используя isEarlier, чтобы решить, когда сравнивать time поля.

public boolean isEarlier(Task argTask) {
    if(this.date.isEarlier(argTas.date)) {
        return true;
    } else if(argTask.date.isEarlier(this.date)) {
        return false;
    } else if(this.time.isEarlier(argTask.time)) { //reached if date fields are equal
        return true;
    }

    //At this stage, either `argTask.time.isEarlier(this.time)` returns true
    //or date and time in both objects are exactly equal
    return false;
}
...