閱讀本文約 「6分鐘」java
你據說過有些程序員上班老是遲到,而下班又很準時嗎?由於他們使用了Java API。核心Java函數庫是由一堆等着被你當作組件使用的類集合而成的。你能夠大量運用這些預先建立好的組件來寫出你的程序。程序員
上一章咱們的程序運行起來了,可是還存在一些低級或者嚴重的bug,即當用戶擊中一個座標後能夠重複擊殺來快速接受遊戲。(以下圖)【Java貓說】構建戰艦類控制檯遊戲segmentfault
爲何呢? 對,這和咱們的檢查方法有關係,咱們看看這個遍歷方法數組
//循環遍歷 for (int cell:locationCells){ if (guess == cell){ result = "hit"; numOfHits++; break; } }
它只是進行判斷是否擊中,可是並無斷定以前是否已經被猜中了。
咱們須要怎麼解決呢?函數
若是可以找到一種數組會在刪除掉某些元素時自動縮小就行了,這樣就沒必要檢查全部的元素,只要查詢它是否帶有尋找中的值就好。若它還可以讓你取出數據而沒必要管理集合的細節就更好!spa
這裏咱們就要介紹這個對象,ArrayList,他不是數組,是Java函數庫中的另外一個類。code
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類型的對象,所以就跟運用其餘的對象同樣,你會使用「.」運算符來調用它的方法。對象
一、通常數組再建立時就必須肯定大小
二、存放對象給通常數組時必須指定位置
三、通常數組使用特殊的語法
四、在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貓說】構建戰艦類控制檯遊戲下一篇推薦: