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

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是一种敏捷开发方法论下的编程实践,强调快速迭代和灵活应对需求变化。在这个阶段,学习...

    Agile Java 习题1--起步

    在这个习题中,我们可能会遇到一些关于类、对象、继承、封装和多态等基本概念的问题,这些都是Java语言的核心特性,也是理解面向对象编程的关键。 "源码"标签提示我们,这个话题会涉及到实际的代码编写。在敏捷开发...

    Agile Java Crafting Code with Test-Driven Development

    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 ...

    agile Java课后习题代码

    【标题】"敏捷Java课后习题代码"主要涉及的是软件开发中的一种敏捷开发方法论——敏捷编程,以及核心编程语言Java的相关应用。在敏捷开发中,Java常常被用来实现快速迭代、灵活调整的项目需求,因为它具有强大的跨...

    Agile-Data-Warehouse-Design-From-Business-Models-to-BI-Models.pdf

    本文档标题《Agile-Data-Warehouse-Design-From-Business-Models-to-BI-Models.pdf》直译为《敏捷数据仓库设计:从业务模型到BI模型》,表明这是一份关于数据仓库设计的资料,着重讲解如何从理解企业业务模型出发,...

    Agile Java 高清中文版-2.7M

    《Agile Java 高清中文版》是一本深入讲解敏捷开发和Java编程的书籍,旨在帮助读者理解并掌握敏捷开发理念以及如何在Java项目中应用这些原则。这本书以高清中文的形式呈现,使得学习过程更为直观易懂,尤其适合中文...

    Agile Java Crafting Code with Test-Driven Development.chm

    《敏捷Java:以测试驱动开发构建代码》是一本专注于软件开发方法论和技术实践的书籍,主要探讨了如何在Java环境中采用敏捷开发理念,尤其是通过测试驱动开发(TDD)来提高代码质量。这本书的核心在于教导开发者如何...

    agile-framework-common-util-master_java_

    `ObjectUtil`类是Agile框架中用于处理和操作Java对象的工具类,它的设计灵感来自于实际开发中的常见需求,如对象之间的转换、属性映射等。`ObjectUtil.to`方法是这个类的一个核心特性,它能够将一个对象转换为另一种...

    Agile Java 中文版

    1. **Java编程基础**:书中首先介绍了Java语言的基本语法,包括数据类型、变量、运算符、流程控制(如if-else,switch,循环等)、函数以及类和对象的概念。这些基础知识是理解和编写Java程序的基础。 2. **面向...

    Agile Java1-4

    1. Java语法:学习Java的基本语法,包括变量、数据类型、控制结构、类和对象、继承、接口等。 2. 面向对象编程:深入理解面向对象编程的三大特性——封装、继承和多态,并掌握如何在Java中实现这些概念。 3. 异常...

    ( 2 agile java.pdf

    - **继承**:支持类的重用,子类可以继承父类的属性和方法,从而减少重复编码。 - **多态**:允许子类重写或覆盖父类的方法,提高程序的灵活性和扩展性。 #### 什么是对象? - **定义**:对象是现实世界中的实体在...

    redmine-agile-1-6-8-light.zip

    redmine_agile-1_6_8-light.zip,redmine agile插件,可以增加redmine功能。 redmine_agile-1_6_8-light.zip,redmine agile插件,可以增加redmine功能。 redmine_agile-1_6_8-light.zip,redmine agile插件,可以...

    《Agile Java》中文版

    7. **Java标准库**:书中会介绍Java标准库中的各种类和方法,如JDBC(Java数据库连接)用于数据库操作,Swing或JavaFX用于图形用户界面开发,以及XML和JSON处理等。 8. **测试与调试**:良好的测试习惯是优秀程序员...

    Agile Java Example Code

    【标题】"Agile Java Example Code" 涵盖了敏捷开发方法在Java编程中的实践应用,这是一系列示例代码,旨在展示如何在实际项目中采用敏捷原则和技巧。敏捷开发是一种以人为本、迭代和增量的软件开发方法论,强调快速...

    Agile Java Development with Spring, Hibernate and Eclipse-code

    Agile开发是一种以人为核心、迭代、逐步交付的软件开发方法论,强调快速响应变化和团队间的紧密合作。在Java开发中,应用敏捷原则可以帮助团队更快地适应需求变更,提高软件质量。 Spring框架是Java企业级应用开发...

    agile java(CHM)

    《Agile Java》是一本专为Java开发者设计的书籍,主要关注的是敏捷开发方法和测试驱动开发(TDD)在Java编程中的应用。这本书的核心理念是通过TDD来提高代码质量,推动敏捷开发流程,帮助开发者编写更加灵活、可维护且...

Global site tag (gtag.js) - Google Analytics