head first java第五章的学习

早上没有带电脑,手写了一部分代码,下午学校的ic共享空间开了,兴奋,立马赶过来学习了。

总算是完成了一个简易版的DotCom游戏,从头到尾的自己再走一遍吧。

分析流程,注意类,实力变量,行为的设置

游戏说明

游戏中有三个虚拟的连续的战舰占位,需要用户猜测,每猜测一次进行相应的判断,直到用户将三个占位全部击倒。

需要两个类

一个类用来做事(就以游戏名命名SimpleDotCom),一个类用来测试(SimpleDotComGame)

伪码——做事的类中

功能:

1.初始化战舰状态void setLocation(int[] local);

2.根据用户的输入判断用户的击中状态String checkYourself(String guess);

实例变量:

战舰位置locationCell数组

用户击中三次numOfHits整数=0;

method:

收到用户输入的数字(转换成可以用的int)

遍历所储存的战舰位置

如果用户输入击中 (在战舰存储位置中找到了)hits

  如果沉船(用户击中三次numOfhits==3)sink

如果用户没有击中miss

返回相应的结果result(创造局部变量)

做事类的测试类

(用来测试做事类的准确性)

功能:创建做事类的实例,直接赋值初始化,直接赋值得到结果和预想的结果比较,如果是对的passed,错的failed

main()的伪码

功能:初始化战舰状态

(控制猜测-判断-继续或者结束的流程)

让用户输入所猜数字,并记录猜测次数

判断数字所对应结果

根据结果判断是否应该继续

结束之后输出用户的猜测次数

局部变量

战舰的位置(用随机数生成)int[] locals;

用户猜测数字String guess(循环中专用)

数字对应的结果String result(循环中专用)

判断状态boolean isAlive

用户猜测次数int numOfGuess

过程中

初始化战舰状态(实例化SimpleDotCom,随机生成0-4中的一个数字,setLocationCells)

(控制猜测-判断-继续或者结束的流程)

让用户输入所猜数字,helper类的方法得到int guess

并记录猜测次数numOfGuess++

判断数字所对应结果String result=SimpleDotCom.checkYourself(guess)

根据结果判断是否应该继续(如果result是sink就退出 用isAlive来控制while循环)

结束之后输出用户的猜测次数(直接输出)

实现代码(依据伪码来实现)

做事类

public class SimpleDotCom
{ int[] locationCell;
  int numOfHits=0;

void setLocation(int[] local)
{
locationCell=local;
}


String checkYourself(String userGuess)
{
int guess=Integer.parseInt(userGuess);
String result="miss";
for (int cell :locationCell)
{
if(guess==cell)
{
numOfHits++;
result="hits";
break;}
}
if(numOfHits==3)
result="sink";
return result;
}//checkYourself结束

}//SimpleDotCom类结束

测试类

public class SimpleDotComTestDrive

public static void main(String[] args)
{
int[]locals={2,3,4};
String userGuess="2";
String testResult="failed";
SimpleDotCom dot=new SimpleDotCom();
dot.setLocation(locals);
String result=checkYourself(userGuess);
if(result.equals("hits"))
{
testResult="passed";
}
System.out.println(testResult);
}
}//SimpleDotComTestDrive类结束


main()方法的实现(辅助类就不实现了,功能就是获得用户输入并且可以抛出异常)

public class SimpleDotComGame

public static void main(String[] args)
{
GameHelper helper=new GameHelper();
boolean isAlive=true;
int numOfGuess=0;
SimpleDotCom dot new SimpleDotCom();
int randomNum=(int)(Math.random()*5);
int[] locals={randomNum,randomNum+1,randomNum+2};
dot.setLocation(locals);

while(isAlive)
{
String guess=helper.getUserInput("Enter your guess number:");
String result =checkYourself(guess);
numOfGuess++;
if (result.equals("sink"))
{
isAlive==false;
}
}//while循环结束
System.out.println("You took num of guess:"+numOfGuess);
}main()方法结束
}//SimpleDotComGame类结束

来一个本章总结吧

整个第五章就是一个大程序的集合,告诉我们怎么分析一个程序,用面对对象的思维,先分析流程,在流程中找到需要的类,实例变量,和行为。实现代码的过程要先写伪码,对于需要测试的类要写上测试码,测试码在编写之前也要写一定的伪码让逻辑线条清晰,让每一个部分要做的事情和功能明确。最后实现代码的过程就直接对照伪码即可实现。所以伪码可以说是重中之重。

下一章,如同第一章看到的那样,要用上java的api函数库。这些函数库不需要自己去实现,只要会运用即可。

下一章将会引入ArrayList类,与数组进行比较(是完全击败还是各有好处,在不同的情形下运用?);将原有的Dotcom游戏的bug进行改进,并且直接面对二维网络、三个战舰进行编程,又应该如何处理存储结构和算法呢?;怎么灵活运用java的3500个内置类呢?

由于时间关系,这次的学习活动可以将第一个点潜心修习完毕。

猜你喜欢

转载自blog.csdn.net/qq_41004188/article/details/82968375