【发布时间】:2016-01-27 11:57:21
【问题描述】:
这个代码在我必须解决的一个练习中受到质疑。尽管我的代码显示了正确的结果(版本一),但我不确定它是否与提供的解决方案(版本二)一样好,或者它是否完全正确。任务是编写一个代表一本书的类和使用自引用向前和向后翻页的方法。
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);
}
}
【问题讨论】:
-
你运行并检查了吗?
-
调用 Book 一个代表页面的类的语义是什么(也在“提供的解决方案”中!)?
-
@Stultuske 我运行并检查了程序。输出查找两个版本,如下所示: 第 500 页 第 499 页 第 498 页 ... 第 455 页
-
@Matt 这个语义对我来说也有点奇怪。 Book 类由页码定义,这就是为什么将实例称为 page 或 previousPage 或 nextPage 的原因。如果我要定义这个练习,我会做不同的,但我只是复制它。
标签: java self-reference