2014-11-20 3 views
1
/** 
* Computes and returns the Date on which Thanksgiving will fall 
* in a given year. 
* 
* NOTE: By law, Thanksgiving is the 4th Thursday in November 
* 
* @param year the year for which to compute the date of Thanksgiving 
* @return the Date of Thanksgiving for the specified year 
*/ 

    public Date getThanksgiving(int year) 
    {  

     int weekcount = 0 ; // record the amount of weeks that has passed 

     Date thanksgiving = new Date (11 , 1 , year) ; 

     while (weekcount < 4) 
      { 
       thanksgiving.next(); // add one to date 

      if (thanksgiving.getDayOfWeek().equals("Thursday"))// check if the day of week is Thursday 
      { 
       weekcount++ ; // add one to weekcount 
      }   

      if (weekcount == 4) 
      { 

      System.out.println(thanksgiving.getLongDate()); 

      } 


      } 



      return thanksgiving ; 
    } 

У меня не должно быть этого утверждения println, вместо этого я должен возвращать правильную дату, используя оператор return. Проблема в том, что я получаю эту «Date @ 2f4d3709» в качестве моего вывода. Дата class-- http://users.cis.fiu.edu/~shawg/2210/Date.htmlОператоры возврата не возвращают выходные данные в правильном формате

ответ

1

Ваш метод возвращает Date объект и так toString() не реализован в классе, выводя объект будет иметь формат, как «Date @ 2f4d3709», когда делает что-то вроде

System.out.println(getThanksgiving(2014)); 

вместо этого вы должны вызвать getLongDate() получить отформатированную строку для печати

System.out.println(getThanksgiving(2014).getLongDate()); 
+0

Непонятно, если он говорит о выходе из 'println' в выдержке кода или' println' (не показан), который выполняется при возврате от данного метода? Если его прежняя «Дата» реализована неправильно или код, как показано, не соответствует времени выполнения. Если это последний, то этот ответ правильный. +1 к вам. – Dev

+0

Извините, я думал, что упомянул о своем полном выходе. Правило println верное, я получаю правильную дату. Ошибка в операторе return. То есть, когда я получаю «Date @ 2f4d3709». Мой вопрос в том, могу ли я исправить оператор return, чтобы я мог получить правильную дату, потому что я не должен получать свой вывод из инструкции println. – Name

+0

Вы можете изменить возвращаемый тип на 'String' и вернуть' thanksgiving.getLongDate() 'вместо этого. Или работайте с объектом 'Date' после его возвращения. – tynn

1

Если вы пытаетесь вызвать PrintStream.println() with an Object argument, что объект будет преобразован в String с помощью Object.toString(). Поскольку ваш класс Date не переопределяет toString(), будет использоваться реализация по умолчанию, предоставляемая java.lang.Object.

Вы можете решить эти три способа.

  1. Вам необходимо позвонить вашему методу Date.getLongDate() и передать значение, возвращаемое на ваш вывод, а не весь объект.
  2. Изменить возвращение getThanksgiving(int) в строку и вернуть Date.getLongDate()
  3. Override toString() в вашем Date классе, как показано ниже.

Пример:

@Override 
public String toString(){ 
    return getLongDate(); 
} 
+0

Таким образом, я не могу использовать оператор возврата для получения даты. – Name

+0

@Name Покажите мне реализацию 'Date', и я смогу вам рассказать. – Dev

+0

Класс даты ---- http://users.cis.fiu.edu/~shawg/2210/Date.java – Name

Смежные вопросы