)
题目要求龟兔赛跑--普通格共100格 _ _龟每次随机移动1至3格兔子每次随机移动1至6格每20格会随机出现以下功能格各一次(不会在同一格内出现两种或两种以上功能)功能格(**和^^可以连续执行和不能连续执行)**幸运星格选手可再行动一次地雷格兔子回到上数两个地雷格龟回到上一地雷格若后方无地雷格则回到起点传送格兔子到达下一传送格龟到达下数两个传送格若前方无传送格则到达终点||树格兔子停止三次行动^^下坡格龟前进10格以下有题目分析出的类让我们开始吧分析思路由于Animal为大的父类可以将成员继承给子类Rabbit和Tortoise类。所以须先考虑Rabbit和Tortoise中共同成员。经过我们仔细的开动脑筋我们能发现Robbit和Tortoise都能奔跑,奔跑我们定义为Run这一点我们很容易想到。在开动我们的脑筋我们能发现Robbit和Tortoise在地图上都有位置我们定义为position这点比较难想到如果没想到可能会在外面定义一个变量来记录在地图上的位置。既然脑筋已经开动不如趁热打铁想想还有吗想比肯定难不倒你们。Run和position已写我们继续看题目发现在功能格中兔子和乌龟也有相同的功能想想能不能把这些也放进Animal这个大父类中。这当然是可以的啊。能想到的话说明对面向对象编程已经有了一定的了解继续加油。那兔子和乌龟的不同功能格行为怎么半当然是放入各自的类中。功能格的书写位置已经找到了那我们就开始用代码来实现他。在写代码前想想类的书写的顺序能大大的增强书写逻辑和理清方向。1.在想想之后我们知道应该先写地图Map类因为Map类是单独的不像Animal与Rabbit 和Tortoise会与其他的类发生继承等关系。Map的实现import java.util.Arrays; public class Map { int gn1[][]new int [5][5]; public String[] getMap(){ String[] map new String[100]; Arrays.fill(map, __ ); int[][] gn new int[5][5]; int []index new int [100]; //以下是好方法的开始注意注意注意重要的东西说3变 //将100格分成5份每份20格 for (int i 0; i 5 ; i) { for (int j 0i*20; j 20i*20 ; j) {//作用让索引和数组中存的值相同 index[j]j; } //获取随机数的 for (int k 0; k 5 ; k) { //[0,1) [20) int a (int)(Math.random()*(20-k)i*20); int temp index[a]; index[a] index[19-ki*20]; index[19-ki*20]temp; gn[k][i]temp; } } for (int i 0; i 5; i) { map[gn[0][i]]** ; map[gn[1][i]] ; map[gn[2][i]] ; map[gn[3][i]]|| ; map[gn[4][i]]^^ ; } return map; } } public void showMap(String map[],Tortoise T,Rabbit R){ String []maps Arrays.copyOf(map,map.length);//数组复制以方便将被兔子和乌龟替换的数据还回到开始样貌再进行重新替换。 if(R.positionT.position){ maps[T.position]遇; }else{ maps[R.position]兔; maps[T.position]龟; }for(String s:maps) { System.out.print(s); } System.out.println(); } }其中有一个好方法求固定范围的随机不重复数,以下是方法图解1.第一步假设要0到19的5不重复的随机数先定义一个数组让每个索引值和数组对应的索引值像同。a[i]索引 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19a[i]对应索引值: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 192.随机生成一个0到19的数假设为第一个随机数为13就将a[13]与a[19]交换。a[i]索引 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19a[i]对应索引值: 0 1 2 3 4 5 6 7 8 9 10 11 12 19 14 15 16 17 18 133.假设为第一个随机数为6就将a[6]与a[18]交换a[i]索引 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19a[i]对应索引值: 0 1 2 3 4 5 18 7 8 9 10 11 12 19 14 15 16 17 6 134.假设为第一个随机数为13就将a[13]与a[17]交换(虽然13已经出现过但由于值已经交换a[13]的值已经改变不会产生影响)a[i]索引 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19a[i]对应索引值: 0 1 2 3 4 5 18 7 8 9 10 11 12 17 14 15 16 19 6 135.假设为第一个随机数为6就将a[6]与a[16]交换(虽然6已经出现过但由于值已经交换a[6]的值已经改变不会产生影响)a[i]索引 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19a[i]对应索引值: 0 1 2 3 4 5 16 7 8 9 10 11 12 17 14 15 18 19 6 136.假设为第一个随机数为1就将a[1]与a[15]交换.a[i]索引 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19a[i]对应索引值: 0 15 2 3 4 5 16 7 8 9 10 11 12 17 14 1 18 19 6 137.欧克我们已经得到了5格重复的数a[19],a[18],a[17],a[16],a[15].代码实现//获取5个随机数的 for (int k 0; k 5 ; k) { //[0,1) [20) int a (int)(Math.random()*20; int temp index[a]; index[a] index[19-k];//倒着换数 index[19-k]temp; }//5个temp就是不重复的5个随机数改假设要43到51的5不重复的随机数先定义一个数组让每个索引值和数组对应的索引值像同。a[i]索引 43 44 45 46 47 48 49 50 51a[i]对应索引值: 43 44 45 46 47 48 49 50 51后面就是与先前对应的了。哈哈哈学会吗Animal的实现由于Animal的方法在子类中全要重写就可以写成抽象方法。public abstract class Animal { //龟兔在地图上的位置 int position 0; //run(重写) public abstract int run(); //验证当前是否为功能格重写 public abstract void function(String [] map,Tortoise T); //跑的计算和功能验证 public void run(String[] map,Tortoise T){ position positionrun(); function(map,T); } //这些子类中都有则写在父类中 //幸运星(写一遍兔子可以调用两遍) public void x(String[] map,Tortoise T){ System.out.println(再执行一次); run(); } //地雷这是一次的地雷兔子只用调两次乌龟就要调用一次 public void dl(String map[]){ while (true){ if(position0){ position--; if(map[position].equals( )){ break; }else{ position0; break; } } } } //传送这是一次的传送兔子只用调一次乌龟就要调用两次 public void cs(String[]map){ while(true){ if(position99) { position; if (map[position].equals( )) { break; } } else{ position99; break; } } } } 欧克父类已经完成开始写子类。Rabbit类的实现继承父类Animal并对父类方法进行重写以实现Rabbit的行为。Rabbit:public class Rabbit extends Animal { Override public int run() { int setp (int )(Math.random()*6)1; System.out.println(兔子走了setp步); return setp; } Override public void function(String[] map,Tortoise T) { if(position99){ if(map[ position].equals(**)){ System.out.println(兔子遇到了幸运星); x(map,T); }else if(map[position].equals()){ System.out.println(兔子遇到了地雷格); dl(map); dl(map); }else if(map[position].equals()){ System.out.println(兔子遇到了传送格); cs(map); }else if(map[position].equals(||)){ System.out.println(兔子遇到了有没有树枝); //乌龟执行3次 T.run(map,T); T.function(map,T); T.run(map,T); T.function(map,T); T.run(map,T); T.function(map,T); } }else{ position99; } } } Tortoise类的实现:public class Tortoise extends Animal { Override public int run() { int setp (int )(Math.random()*3)1; System.out.println(乌龟走了setp步); return setp; } Override public void function(String[] map, Tortoise T) { if(position99){ if(map[position].equals(** )){ System.out.println(乌龟遇到了幸运星); x(map,T); }else if(map[position].equals( )){ System.out.println(乌龟遇到了传送格); cs(map); cs(map); }else if(map[position].equals( )){ System.out.println(乌龟遇到了地雷格); dl(map); }else if(map[position].equals(^^ )){ System.out.println(乌龟遇到了下坡); position position10; function(map,T); } } else{ position99; } } }注意父类public void run(String[] map,Tortoise T){ position positionrun(); function(map,T); }子类Override public int run() { int setp (int )(Math.random()*6)1; System.out.println(兔子走了setp步); return setp; }Override public int run() { int setp (int )(Math.random()*3)1; System.out.println(乌龟走了setp步); return setp; }还记得怎么区分同名方法的调用对象吗在Java中区分同名方法的调用对象主要依赖于方法的参数类型和参数值。当我们使用相同的方法名但不同的参数时编译器会认为这是不同的方法因此可以区分不同的对象调用相同的方法。先讲一下这个以防后面的方法调用出现疑惑。好的我们的准备工资已经完成开始将这些类运用在Game中开始组合测试代码。Game的实现//主函数只用来调用方法 public class Game { public static void main(String[] args) { Map map new Map(); //用Map中getmap方法显示地图 String [] m map.getMap(); //创建对象 Tortoise T new Tortoise(); Rabbit R new Rabbit(); String maps[]m;//将map的信息用maps记录下来后面的地图就在maps的基础上改变 //输出地图的总览 for (int i 0; i m.length ; i) { if(i%200){ System.out.println(); } System.out.print(m[i]); } System.out.println(); //开始整合运行。 while(T.position99R.position99){//通过while循环来一直执行。 //通过参数的差异调用父类中的run方法而父类中的run方法也调用了子类重写run方法和function方法。即完成了输出随机步数也通过调用function方法进入判断当前位置是否为功能格的部分。 T.run(maps,T); R.run(maps,T); //判断是谁先到达终点将越界的数据拉回终点 if(T.position99R.position99){ T.position99; R.position99; }else if(R.position99){ R.position99; }else if(T.position99){ T.position99; } //输出兔子和乌龟在地图上的位置。 map.showMap(maps,T,R); } //最后判断兔子和乌龟谁是笑到最后的赢家 if(T.position99R.position99){ System.out.println(平局); }else if(T.position99){ System.out.println(乌龟赢了); }else if(R.position99){ System.out.println(兔子赢了); } } } 结果展示** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ ____ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ ____ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ ____ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了2步兔子走了1步** 兔龟__ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了3步兔子走了4步** || __ __ __ 遇__ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步兔子走了1步** || __ __ __ __ 遇__ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步兔子走了6步** || __ __ __ __ __ 龟^^ __ __ __ 兔__ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了3步兔子走了5步** || __ __ __ __ __ __ ^^ __ 龟__ __ __ __ __ 兔 __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步兔子走了3步** || __ __ __ __ __ __ ^^ __ __ 龟 __ __ __ __ __ __ 兔 __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了3步兔子走了4步** || __ __ __ __ __ __ ^^ __ __ __ __ 龟__ __ __ __ __ __ __ 兔__ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了2步兔子走了6步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ 龟__ __ __ __ __ __ __ __ __ || __ 兔^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步兔子走了6步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ 龟 __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ 兔__ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了3步兔子走了2步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ 龟 __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ 兔__ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了2步兔子走了4步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ 龟__ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ 兔 __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了3步兔子走了5步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ 龟__ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ 兔__ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步兔子走了6步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ 龟__ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ 兔__ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了3步兔子走了3步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || 龟__ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ 兔__ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步兔子走了6步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ 龟^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ 兔|| __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了3步兔子走了3步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ 龟__ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ 兔 __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步兔子走了2步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ 龟__ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ 兔__ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了2步乌龟遇到了幸运星再执行一次乌龟走了1步兔子走了1步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ 龟__ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ 兔 __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步兔子走了6步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** 龟 __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ 兔^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了1步乌龟遇到了传送格兔子走了4步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ 龟__ ** __ __ __ ^^ __ __ 兔__ __ ^^ __ __ __ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了2步乌龟遇到了幸运星再执行一次乌龟走了2步兔子走了6步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ 龟__ __ __ ^^ __ __ __ __ __ ^^ __ 兔__ __ __ __ __ __ __ || __ __ __ ** __ __乌龟走了3步兔子走了6步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ 龟^^ __ __ __ __ __ ^^ __ __ __ __ __ __ __ 兔__ __ || __ __ __ ** __ __乌龟走了1步乌龟遇到了下坡兔子走了4步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ 龟__ __ __ __ __ __ || 兔__ __ ** __ __乌龟走了1步兔子走了6步** || __ __ __ __ __ __ ^^ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ || __ __ ^^ __ __ __ __ ** __ __ __ __ __ __ __ __ ** __ __ __ || __ __ ^^ __ __ __ __ __ __ __ || __ __ __ __ __ ** __ __ __ ^^ __ __ __ __ __ ^^ __ __ __ 龟__ __ __ __ __ || __ __ __ ** __ 兔兔子赢了哈哈还是兔子赢了你们的呢是有先天优势的兔子还是持之以恒的乌龟赢了呢哈哈学会了吗加油自己加油陌生人。最后送你们一句话当然也包括我自己。在生活的道路上我们都会遇到挑战和困难。这些磨难并不意味着失败而是我们成长的催化剂。记住每一次跌倒都是通往成功的必经之路。你有无穷的潜力等待挖掘只要你有勇气去追求去梦想去努力你就能创造奇迹。你是最棒的无论路有多么艰难只要你坚持下去胜利终将属于你。加油你是最棒的