构建程序,实现员工的信息的打印,打印的效果如图-1所示:
图-1
从图-1可以看出,第二次打印员工“”信息时,该员工的工资上涨25%。
首先,一个员工包含多方面的信息数据,可以考虑使用一个对象来封装员工的数据。而多个员工的数据结构项是相同的,不同的是具体的数据,因此,可以定义一个类 Emp,用于表示员工;并在类中定义多个属性用于表示员工的各项数据。代码如下所示:
public class Emp { String name; int age; char gender; double salary; }
然后,修改类 Emp,在类中定义打印员工信息的方法,代码如下所示:
public void printInfo() { System.out.println("--------------------"); System.out.println("姓名: " + name); System.out.println("年龄:" + age); System.out.println("性别:" + gender); System.out.println("薪水:" + salary); }
最后,在main 方法中,创建员工对象之后,可以直接调用该对象的打印方法,以显示数据。代码如下所示:
Emp emp2 = new Emp(); emp2.name = "白发馍女"; emp2.age = 24; emp2.gender = '女'; emp2.salary = 6000; emp2.printInfo();
将员工信息封装为printInfo方法的好处为:如果员工增加其他数据项,或者打印的功能发生变化(比如打印的格式发生变化),只需要维护类 Emp 的代码即可,而调用方(方法main)依然只需要调用相应的方法即可,从而简化了代码的维护和扩展。
实现此案例需要按照如下步骤进行。
步骤一:定义类Emp
首先定义一个名为 Emp 的类,并在类中定义四个属性,分别表示员工的姓名、年龄、性别和薪资。代码如下所示:
public class Emp { String name; int age; char gender; double salary; }
步骤二:修改类Emp,为其定义打印员工信息的方法
修改类 Emp 中的代码,为该类定义方法,用于打印员工信息。代码如下所示:
public class Emp { String name; int age; char gender; double salary; #cold_bold /** #cold_bold * 打印员工信息 #cold_bold */ #cold_bold public void printInfo() { #cold_bold System.out.println("--------------------"); #cold_bold System.out.println("姓名: " + name); #cold_bold System.out.println("年龄:" + age); #cold_bold System.out.println("性别:" + gender); #cold_bold System.out.println("薪水:" + salary); #cold_bold } }
步骤三:构建对象,打印数据
创建EmpManager类,在该类的 main 方法中添加代码:定义对象,封装员工的各项数据,并调用对象的打印方法。代码如下所示:
public class EmpManager{ public static void main(String[] args) { #cold_bold //创建对象 #cold_bold Emp emp2 = new Emp(); #cold_bold emp2.name = "白发馍女"; #cold_bold emp2.age = 24; #cold_bold emp2.gender = '女'; #cold_bold emp2.salary = 6000; #cold_bold //打印数据 #cold_bold emp2.printInfo(); } }
步骤四:修改薪资信息
将员工的薪资提高25%,并重新打印信息。代码如下所示:
public class EmpManager{ public static void main(String[] args) { //创建对象 Emp emp2 = new Emp(); emp2.name = "白发馍女"; emp2.age = 24; emp2.gender = '女'; emp2.salary = 6000; //打印数据 emp2.printInfo(); #cold_bold //调整薪资 #cold_bold emp2.salary *= 125.0 / 100.0; #cold_bold emp2.printInfo(); } }
本案例中,类Emp 的完整代码如下所示:
public class Emp { String name; int age; char gender; double salary; /** * 打印员工信息 */ public void printInfo() { System.out.println("--------------------"); System.out.println("姓名: " + name); System.out.println("年龄:" + age); System.out.println("性别:" + gender); System.out.println("薪水:" + salary); } }
类EmpManager的完整代码如下所示:
public class EmpManager{ public static void main(String[] args) { //创建对象 Emp emp2 = new Emp(); emp2.name = "白发馍女"; emp2.age = 24; emp2.gender = '女'; emp2.salary = 6000; //打印数据 emp2.printInfo(); //调整薪资 emp2.salary *= 125.0 / 100.0; emp2.printInfo(); } }
Tetris俄罗斯方块(Tetris, 俄文:Тетрис)是一款风靡全球的电视游戏机和掌上游戏机游戏,它由俄罗斯人阿列克谢·帕基特诺夫发明,故得此名。俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分。由于上手简单、老少皆宜,从而家喻户晓,风靡世界。其界面效果如图-2所示:
图-2
Tetris游戏的基本规则为:
图-3
Tetris游戏的逻辑为:
本案例需要定义类来表示Tetris游戏中的基本构造单元:格子。
每一个格子可以由其所在行的行号和所在列的列号来确定位置。例如:图-4中的白色格子,其坐标为(3,2),即行号为3,列号为2;绿色格子的坐标为(8,7),即行号为8,列号为7;黄色格子的坐标为(17,4),即行号为17,列号为4。
图-4
因此,需要定义Cell类来表示格子,且类中需要包含两个成员变量: row表示行号,类型为int;col表示列号,类型为int;代码如下所示:
public class Cell { int row; int col; }
实现此案例需要按照如下步骤进行。
步骤一:定义 Cell类
首先定义一个名为 Cell的类,表示格子,并在类中添加两个int类型的成员变量:col和row,分别表示格子的横向坐标和纵向坐标。代码如下所示:
public class Cell { int row; int col; }
本案例中,类Cell 的完整代码如下所示:
public class Cell { int row; int col; }
本案例需要实现格子下落、左移以及获取格子的位置信息的功能,详细要求如下:
1. 实现格子的下落功能,即,为 Cell类定义下落的方法,调用该方法后,格子的位置将下降一行。
2. 实现格子的左移功能,即,为 Cell类定义左移的方法:调用左移方法,并传入需要移动的列数,则格子将向左移动相应的列数.
3. 实现格子的getCellInfo方法,调用该方法,即可打印格子的位置信息。
要实现本案例要求的功能,解决方案如下:
1. 为实现格子下落,需要为Cell类定义 drop 方法,并在该方法中,将格子的行数增加一行,代码如下所示:
public void drop() { row++; }
2. 为实现格子左移,需要为Cell类定义 moveLeft 方法,该方法需要接收一个 int 类型的参数,表示向左移动的列数,然后在该方法中,将格子的列数减少相应的数值。代码如下所示:
public void moveLeft(int d) { col -= d; }
3. 为输出格子的位置信息,可以为Cell类定义 getCellInfo方法,该方法返回格子的位置信息,格式形如 row,col。代码如下所示:
public String getCellInfo() { return row + "," + col; }
实现此案例需要按照如下步骤进行。
步骤一:为 Cell 类定义 drop 方法
在Cell 类中,添加方法 drop,实现行数的增长。代码如下所示:
public class Cell { int row; int col; #cold_bold//下落一行 #cold_bold public void drop() { #cold_bold row++; #cold_bold } }
步骤二:为 Cell 类定义 moveLeft 方法
在Cell 类中,添加方法 moveLeft,实现列数的减少。代码如下所示:
public class Cell { int row; int col; //下落一行 public void drop() { row++; } #cold_bold//左移 #cold_boldpublic void moveLeft(int d) { #cold_bold col -= d; #cold_bold } }
步骤三:为 Cell 类定义 getCellInfo方法
在Cell 类中,添加方法 getCellInfo,用于返回格子的位置信息。代码如下所示:
public class Cell { int row; int col; //下落一行 public void drop() { row++; } //左移 public void moveLeft(int d) { col -= d; } #cold_boldpublic String getCellInfo () { #cold_bold return row + "," + col; #cold_bold } }
本案例中,类Cell 的完整代码如下所示:
public class Cell { int row; int col; //下落一行 public void drop() { row++; } //左移 public void moveLeft(int d) { col -= d; } public String getCellInfo () { return row + "," + col; } }
之前案例已经构建了Cell类并定义了格子的下落、左移以及获取格子的位置信息方法。本案例要求可以设置格子的坐标,然后在界面上打印显示格子的位置信息。界面效果如图-5所示:
图-5
为了更好的理解本案例,我们用图-6来标识场地以及格子的详细信息。
图-6
由图-6可以看出,游戏所在的平面由10列×20行个格子构成,可以将场地的左上角点定为原点,对行和列进行编号,列号为0~9,行号为0~19。
本案例详细要求如下:
1. 首先需要打印出游戏所在的平面(宽10格,高20格),用“-”号表示平面上的每个单元;然后假设某格子的行号为15,列号为6,即,该格子的坐标为(15,6),需要使用“*”号打印显示该格子,如图-6中蓝色圈内所示。
2. 测试格子的下落功能,界面效果如图-7所示:
图-7
图-7中的左图中的蓝色圈中的“*”号表示格子的原始位置,右图中蓝色圈中的“*”号表示格子下落一行后的位置。
首先创建一个 Cell对象,并设置行列坐标,代码如下所示:
Cell cell = new Cell(); cell.row = 15; cell.col = 6;
然后,需要在控制台输出10列×20行的场地,示意代码如下所示:
//总行数和总列数 int totalRow = 20; int totalCol = 10; for (int row = 0; row < totalRow; row++) { for (int col = 0; col < totalCol; col++) { System.out.print("- ");//输出场地 } System.out.println(); }
如果需要在场地上用“*”号表示某个单元格,则需要进行行列的判断。示意代码如下所示:
//总行数和总列数 int totalRow = 20; int totalCol = 10; //某个格子的行和列 int currentRow = 5; int currentCol = 3; for (int row = 0; row < totalRow; row++) { for (int col = 0; col < totalCol; col++) { #cold_bold if ( currentRow == row && currentCol == col) { #cold_bold System.out.print("* ");//输出格子 #cold_bold } else { #cold_bold System.out.print("- ");//输出场地 #cold_bold } } System.out.println(); }
实现此案例需要按照如下步骤进行。
步骤一:定义 CellGame 类
定义一个名为 CellGame 的类,并在类中添加Java应用程序的主方法main,代码如下所示:
public class CellGame{ public static void main(String[] args) { } }
步骤二:创建打印 Cell 对象的方法
在CellGame 的类中定义方法 printCell() ,用于打印场地以及某个 Cell 的信息。场地用“-”表示,指定的格子用“*”表示。为标识出指定格子的信息,需要将 Cell 对象作为参数传入。代码如下所示:
public class CellGame{ public static void main(String[] args) { } #cold_bold public static void printCell(Cell cell) { #cold_bold int totalRow = 20; #cold_bold int totalCol = 10; #cold_bold #cold_bold //打印场地 #cold_bold for (int row = 0; row < totalRow; row++) { #cold_bold for (int col = 0; col < totalCol; col++) { #cold_bold if (cell.row == row && cell.col == col) { #cold_bold //打印指定的格子 #cold_bold System.out.print("* "); #cold_bold } else { #cold_bold System.out.print("- "); #cold_bold } #cold_bold } #cold_bold System.out.println(); #cold_bold } #cold_bold } }
步骤三:创建Cell对象,并打印
在main 方法中添加代码,创建一个 Cell 对象,设置其位置后,调用上一步中所创建的打印方法打印信息。代码如下所示:
public class CellGame{ public static void main(String[] args) { #cold_bold System.out.println("----------绘制Cell----------"); #cold_bold //创建 Cell对象,并打印 #cold_bold Cell cell = new Cell(); #cold_bold cell.row = 15; #cold_bold cell.col = 6; #cold_bold printCell(cell); } public static void printCell(Cell cell) { int totalRow = 20; int totalCol = 10; //打印场地 for (int row = 0; row < totalRow; row++) { for (int col = 0; col < totalCol; col++) { if (cell.row == row && cell.col == col) { //打印指定的格子 System.out.print("* "); } else { System.out.print("- "); } } System.out.println(); } } }
步骤四:测试 drop 方法
在CellGame 类的main 方法中继续添加代码:调用cell 对象的 drop方法,实现格子下落一行,然后调用打印方法打印信息。代码如下所示:
public class CellGame{ public static void main(String[] args) { System.out.println("----------绘制Cell----------"); //创建 Cell对象,并打印 Cell cell = new Cell(); cell.row = 15; cell.col = 6; printCell(cell); #cold_bold //调用drop方法,下落一行 #cold_bold System.out.println("----------Cell下落一行----------"); #cold_bold cell.drop(); #cold_bold printCell(cell); } public static void printCell(Cell cell) { int totalRow = 20; int totalCol = 10; //打印场地 for (int row = 0; row < totalRow; row++) { for (int col = 0; col < totalCol; col++) { if (cell.row == row && cell.col == col) { //打印指定的格子 System.out.print("* "); } else { System.out.print("- "); } } System.out.println(); } } }
测试moveLeft方法和getCellInfo方法与测试drop方法类似,请自行测试。
本案例中,类Cell 的完整代码如下所示:
public class Cell { int row; int col; //下落一行 public void drop() { row++; } //左移 public void moveLeft(int d) { col -= d; } public String getCellInfo () { return row + "," + col; } }
类CellGame的完整代码如下所示:
public class CellGame{ public static void main(String[] args) { System.out.println("----------绘制Cell----------"); //创建 Cell对象,并打印 Cell cell = new Cell(); cell.row = 15; cell.col = 6; printCell(cell); //调用drop方法,下落一行 System.out.println("----------Cell下落一行----------"); cell.drop(); printCell(cell); } public static void printCell(Cell cell) { int totalRow = 20; int totalCol = 10; //打印场地 for (int row = 0; row < totalRow; row++) { for (int col = 0; col < totalCol; col++) { if (cell.row == row && cell.col == col) { //打印指定的格子 System.out.print("* "); } else { System.out.print("- "); } } System.out.println(); } } }