看完第三课之后做习题,怎么做都觉得不合适,于是留到看完第四课再做的。
1、将Pawn类修改成Piece。
先修改测试:
@Test
public void testCreate() {
Piece piece = Piece.createPiece("white","Pawn");
assertEquals("white", piece.getColor());
assertEquals("Pawn", piece.getName());
}
在修改Pawn类为Piece,并使其通过测试。
public class Piece {
private String color ;
private String name;
private Piece(String color, String name) {
this.color = color;
this.name = name;
}
public static Piece createPiece(String color, String name) {
return new Piece(color, name);
}
public String getColor() {
return color;
}
public String getName() {
return name;
}
}
2、按照题目修改BoardTest,并修改Board使其通过测试,得到最简单的Board代码如下:
public class Board {
public void initialize() {
}
public int pieceCount() {
return 32;
}
public String print() {
return "RNBQKBNR\n" +
"PPPPPPPP\n" +
"........\n" +
"........\n" +
"........\n" +
"........\n" +
"pppppppp\n" +
"rnbqkbnr\n";
}
}
这个明显是不对的,但是的确又能够通过测试(很大的可能是我跳过了第三课的习题)。只要能够通过测试,就可以先不管,进而进行下一步。
3、测试Board包含了16个黑棋,16个白棋。
先在Board中testCreate添加测试代码:
assertEquals(16, board.blackPieceCount());
assertEquals(16, board.whitePieceCount());
相应的修改Board代码:
public int blackPieceCount() {
return 16;
}
public int whitePieceCount() {
return 16;
}
现在在反过来看第三课的习题,会发现我错过了一个约定:用小写字母表示白棋,大写字母表示黑棋。同时在Board中存储Piece(开始是Pawn),在initialize中完成为棋盘添加棋子的操作。
4、重构:向棋盘添加棋子。
首先将测试PieceTest中的“Pawn”修改为“p”;
然后修改Board类用一个数组来表示棋盘。
private Piece pieces[][] = new Piece[8][8];
再在initialize方法中初始化这个数组:
pieces[0][0] = Piece.createPiece("black", "R");
pieces[0][1] = Piece.createPiece("black", "N");
pieces[0][2] = Piece.createPiece("black", "B");
pieces[0][3] = Piece.createPiece("black", "Q");
pieces[0][4] = Piece.createPiece("black", "K");
pieces[0][5] = Piece.createPiece("black", "B");
pieces[0][6] = Piece.createPiece("black", "N");
pieces[0][7] = Piece.createPiece("black", "R");
for(int i = 0; i<8; i++) {
pieces[1][i] = Piece.createPiece("black", "P");
pieces[6][i] = Piece.createPiece("white", "p");
}
pieces[7][0] = Piece.createPiece("white", "r");
pieces[7][1] = Piece.createPiece("white", "n");
pieces[7][2] = Piece.createPiece("white", "b");
pieces[7][3] = Piece.createPiece("white", "q");
pieces[7][4] = Piece.createPiece("white", "k");
pieces[7][5] = Piece.createPiece("white", "b");
pieces[7][6] = Piece.createPiece("white", "n");
pieces[7][7] = Piece.createPiece("white", "r");
再用类属性来表示piece数量:
private int pieceCount = 0;
private int blackPieceCount = 0;
private int whitePieceCount = 0;
在initialize中初始化:
pieceCount = 32;
whitePieceCount = 16;
blackPieceCount = 16;
5、重构修改print(),使其按照存储的piece来打印:
StringBuilder builder = new StringBuilder();
for(Piece tempPieces[] : pieces) {
for(Piece piece : tempPieces) {
if(piece == null) {
builder.append(".");
} else {
builder.append(piece.getName());
}
}
builder.append("\n");
}
return builder.toString();
分享到:
相关推荐
Presents an expert overview of TDD and agile programming techniques from the Java developer's perspective Brings together practical best practices for Java, TDD, and OO design Walks through setting ...
NULL 博文链接:https://gcgan.iteye.com/blog/601074
Agile Java Crafting Code with Test-Driven Development.chm
NULL 博文链接:https://gcgan.iteye.com/blog/584488
Agile Java 高清中文版-2.7MAgile
agile Java课后习题代码
值得一看的好书Agile Java Crafting Code with Test-Driven Development.chm
Agile Java Example Code
Agile Java 中文版 优秀的入门书籍之一
Agile-Data-Warehouse-Design-From-Business-Models-to-BI-Models 敏捷数据仓库开发, presentation文档
Agile Java Development with Spring, Hibernate and Eclipse 这个是代码,书也在我的资源里。
agile java 每一章 课程 的 源码;
object.ObjectUtil中的对象深度转换能力,方法为ObjectUtil.to 该能力是Agile系列框架高代码复用率的根本所在
Wi-Fi-Agile-Multiband-Technical-Specification-v1.4
agile-admin vue3-element-plus-admin vue3.0 ts typescript e.zip
<<agileJava>> 这本书的程序代码 非常不错的一本书
Agile Java 高清中文版 这本书一大特点是以单元测试和TDD来贯穿全书的,在教你Java各种重要的基础知识的过程中,潜移默化的影响你的编程思维走向敏捷,走向TDD。这本书成书,以JDK5.0的语法为基础讲解,要学习JDK...