看完第三课之后做习题,怎么做都觉得不合适,于是留到看完第四课再做的。
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();
分享到:
相关推荐
【标题】"Agile Java习题2--Java基础"涵盖了Java编程语言的基础概念和实践,是学习者在Java开发旅程中的重要一步。Agile Java是一种敏捷开发方法论下的编程实践,强调快速迭代和灵活应对需求变化。在这个阶段,学习...
- 推荐读物:《Effective Java》和《Agile Software Development:Principles, Patterns, and Practices》这两本书深入浅出地讲解了设计模式及其应用场景。 #### 二、Linux基础知识 1. **Linux操作系统基础**: ...
你需要掌握Java的基础语法,包括变量、数据类型、运算符、流程控制、类与对象等。你可以通过阅读书籍或观看教学视频来学习,但关键在于实践,多编写代码,完成各种练习题,确保对每个知识点都能熟练应用。此外,了解...
这份"阿里巴巴研发工程师笔试选择题二-教程与笔记习题"涵盖了多个IT领域的核心知识点,旨在测试候选人的技术功底和解决问题的能力。以下是对这些知识点的详细解析: 1. **计算机网络** - TCP/IP协议栈:理解TCP/IP...