【Java猫说】ArrayList处理战舰游戏BUG

阅读本文约 “6分钟”


ArrayList处理战舰游戏BUG

前言

你听说过有些程序员上班总是迟到,而下班又很准时吗?因为他们使用了Java API。核心Java函数库是由一堆等着被你当做组件使用的类集合而成的。你可以大量运用这些预先创建好的组件来写出你的程序。

Bug复现

上一章我们的程序运行起来了,但是还存在一些低级或者严重的bug,即当用户击中一个坐标后可以重复击杀来快速接受游戏。(如下图)【Java猫说】构建战舰类控制台游戏

图片描述

为什么呢? 对,这和我们的检查方法有关系,我们看看这个遍历方法

//循环遍历 for (int cell:locationCells){     if (guess == cell){         result = "hit";         numOfHits++;         break;     } }

它只是进行判断是否击中,但是并没有判定之前是否已经被猜中了。
我们需要怎么解决呢?

解决BUG(ArrayList)

如果能够找到一种数组会在删除掉某些元素时自动缩小就好了,这样就不必检查所有的元素,只要查询它是否带有寻找中的值就好。若它还能够让你取出数据而不必管理集合的细节就更好!

这里我们就要介绍这个对象,ArrayList,他不是数组,是Java函数库中的另一个类。

add(Object)     向list中加入对象参数     remove(int index)     在索引参数中移除对象      remove(Object elem)     移除该对象      contains(Object elem)     如果和对象参数匹配返回“true”      isEmpty()     如果list中没有元素返回“true”      indexOf(Object elem)     返回对象参数的索引或-1     size()     返回list中元素的个数      get(int index)     返回当前索引参数的对象

这里你还要注意一点,在使用ArrayList时,你只是在运用ArrayList类型的对象,因此就跟运用其他的对象一样,你会使用“.”运算符来调用它的方法。

比较ArrayList与一般数组

1、一般数组再创建时就必须确定大小
2、存放对象给一般数组时必须指定位置
3、一般数组使用特殊的语法
4、在Java5.0中ArrayList是参数化的(parameterized)

知道了方式,接下来我们来修复bug吧!

修改代码

我们将做如下修改

public class DotCom {      private ArrayList<String> locationCells;     int numOfHits = 0;      //赋值数组     public void setLocationCells(ArrayList<String> locs){         locationCells = locs;     }      //检查用户输入与随机数组是否存在相同     public String checkYourSelf(String userInput){          String result = "miss";         //检索对象参数         int index = locationCells.indexOf(userInput);         if (index >= 0){             //击中移除对象             locationCells.remove(index);             //判断是否结束或存在其余战舰             if (locationCells.isEmpty()){                 result = "kill";             }else{                 result = "hit";             }         }         return result;     }  }

下一章让我们来完成更完美的游戏吧!


本文已转载个人技术公众号:UncleCatMySelf
欢迎留言讨论与点赞
上一篇推荐:【Java猫说】构建战舰类控制台游戏
下一篇推荐:

脚本宝典为你提供优质服务
脚本宝典 » 【Java猫说】ArrayList处理战舰游戏BUG

发表评论

提供最优质的资源集合

立即查看 了解详情