2016-01-27 5 views
-1

Этот код был поставлен под сомнение в упражнении, которое я должен был решить. Хотя мой код показывает правильный результат (версия 1), я не уверен, насколько он хорош, как предоставленное решение (версия 2), или если оно вообще правильно. Задача состоит в том, чтобы написать класс, который представляет книгу и методы для перемотки вперед и назад с помощью саморекламы.В чем разница между двумя отмеченными методами? Являются ли их результаты одинаковыми?

public class Book { 

    private int page; 
    private Book nextPage; 

    public Book(int page) { 
     setPage(page); 
     setNextPage(null); 
    } 

//Getter and Setter 

    public void setPage(int page){ 
     this.page = page; 
    } 

    public int getPage() { 
     return this.page; 
    } 

    public void setNextPage(Book nextPage) { 
     this.nextPage = nextPage; 
    } 

    public Book getNextPage() { 
     return nextPage; 
    } 

/*The following methods are getting two int values and should page backward, showing each page number. */ 

Версия одна:

public static void pageBackward1(int currentPage, int goalPage) { 
     Book page = new Book(currentPage); 
     System.out.print("Page " + page.getPage() + " "); 
     while(goalPage != page.getPage()) { 
      currentPage--; 
      page.nextPage = new Book(currentPage); 
      page = page.nextPage; 
      System.out.print("Page " + page.getPage() + " "); 
     } 
    } 

Версия два:

public static void pageBackward2(int currentPage, int goalPage) { 
     Book previousPage = null; 
     for(int i = currentPage; i <= goalPage; i++) { 
      Book page = new Book(i); 
      page.setNextPage(previousPage); 
      previousPage = page; 
     } 
     Book page = previousPage; 
     while(page != null) { 
      System.out.print("Page " + page.getPage() + " "); 
      page = page.getNextPage(); 
     } 
     System.out.println(); 
    } 
} 

Следующая демо-класс прост и показывает выполнение методов:

public class BookDemo { 

    public static void main(String[] args) { 
     Book.pageBackward1(500, 455); 
     System.out.println(); 
     Book.pageBackward2(500, 455); 
    } 
} 
+7

Вы запустили его и проверьте? – Stultuske

+1

Что такое смысловое значение (также в «предоставленном решении»!) Вызова Задать класс, представляющий страницу? – Matt

+0

@Stultuske Я побежал и проверил программу. Результат выглядит так: страница 500 страница 499 страница 498 ... страница 455 –

ответ

0

решения, так как у вас есть sai d, эквивалентны (буквально! По тем же входным данным они выводят одни и те же данные, несмотря на то, что через stdout вместо возвращаемого значения).

Я полагаю, что из-за прилагаемого решения, которое было предложено упражнением, необходимо предварительно заполнить/предварительно сгенерировать Book с перед тем, как пройти через них, используя геттер getNextPage(). Я считаю, что вы пришли к такому же выводу, так как вы сделали почти одно и то же, но в другом порядке, переступая экземпляры один раз, но по мере их создания (в отличие от, например, перехода через все существующие Books, чтобы прийти к окончательный до создания следующего).

По моему мнению, это упражнение просто не может учить много из-за этой вольной семантики и неясных целей, и было бы гораздо более продуктивно для студентов начать работать прямо с более явно названными и генерируемыми структурами данных linked list.