【Java貓說】ArrayList處理戰艦遊戲BUG

閱讀本文約 「6分鐘」java


ArrayList處理戰艦遊戲BUG

前言

你據說過有些程序員上班老是遲到,而下班又很準時嗎?由於他們使用了Java API。核心Java函數庫是由一堆等着被你當作組件使用的類集合而成的。你能夠大量運用這些預先建立好的組件來寫出你的程序。程序員

Bug復現

上一章咱們的程序運行起來了,可是還存在一些低級或者嚴重的bug,即當用戶擊中一個座標後能夠重複擊殺來快速接受遊戲。(以下圖)【Java貓說】構建戰艦類控制檯遊戲segmentfault

圖片描述

爲何呢? 對,這和咱們的檢查方法有關係,咱們看看這個遍歷方法數組

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

它只是進行判斷是否擊中,可是並無斷定以前是否已經被猜中了。
咱們須要怎麼解決呢?函數

解決BUG(ArrayList)

若是可以找到一種數組會在刪除掉某些元素時自動縮小就行了,這樣就沒必要檢查全部的元素,只要查詢它是否帶有尋找中的值就好。若它還可以讓你取出數據而沒必要管理集合的細節就更好!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類型的對象,所以就跟運用其餘的對象同樣,你會使用「.」運算符來調用它的方法。對象

比較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貓說】構建戰艦類控制檯遊戲下一篇推薦:

相關文章
相關標籤/搜索