`
gcgan
  • 浏览: 39175 次
社区版块
存档分类
最新评论

Agile Java 习题3,4--类方法和类变量

阅读更多

 

看完第三课之后做习题,怎么做都觉得不合适,于是留到看完第四课再做的。

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();
0
0
分享到:
评论

相关推荐

    Agile Java习题2--Java基础

    【标题】"Agile Java习题2--Java基础"涵盖了Java编程语言的基础概念和实践,是学习者在Java开发旅程中的重要一步。Agile Java是一种敏捷开发方法论下的编程实践,强调快速迭代和灵活应对需求变化。在这个阶段,学习...

    Android学习基本路线指导.

    - 推荐读物:《Effective Java》和《Agile Software Development:Principles, Patterns, and Practices》这两本书深入浅出地讲解了设计模式及其应用场景。 #### 二、Linux基础知识 1. **Linux操作系统基础**: ...

    Android学习路线.

    你需要掌握Java的基础语法,包括变量、数据类型、运算符、流程控制、类与对象等。你可以通过阅读书籍或观看教学视频来学习,但关键在于实践,多编写代码,完成各种练习题,确保对每个知识点都能熟练应用。此外,了解...

    阿里巴巴研发工程师笔试选择题二-教程与笔记习题

    这份"阿里巴巴研发工程师笔试选择题二-教程与笔记习题"涵盖了多个IT领域的核心知识点,旨在测试候选人的技术功底和解决问题的能力。以下是对这些知识点的详细解析: 1. **计算机网络** - TCP/IP协议栈:理解TCP/IP...

Global site tag (gtag.js) - Google Analytics