初涉java庫--ArrayList,java--arraylist

來源:互聯網
上載者:User

初涉java庫--ArrayList,java--arraylist

我的車就差一個輪子啦,造好輪子,我就飛上天與太陽肩並肩啦,想想都激動。什麼你要自己造輪子,是不是傻,商店裡不都是別人造好的嗎,又好又方便,只需一點money,你沒有money,那你只能做個安靜的美男子啦。幸運的是編程世界中的輪子不需要money,今天就來看看如何調用庫中的輪子。

今天的內容:

 一.修改bug 這篇部落格是接著上篇的,沒有看的,請點擊此出查看:上一篇隨筆現在揭示那個程式的最大的bug:看測試代碼,你可能已經猜到啦。看結果:沒錯,你可以連續猜同一個位置來過關,看看哪裡錯啦,肯定是在checkYourself方法裡,看看原始碼:
 1 public String checkYourself(int guess) { 2         String result = "miss"; 3         for(int i: localCells) { 4             if ( i == guess) {//就在這裡,猜中後沒有做任何處理 5                 result = "hit"; 6                 numOfHit ++; 7                 break; 8             } 9         }10         if (numOfHit == 3) {11             result = "kill";12         }13         return result;14     }

既然知道了問題,就該解決它。你可以有以下解決方案。

1.再建立一個boolean[] hitFlag = {false, false, false},猜中哪個位置,就把對應的hitFlag數組中的位置設定為true, 在猜中之後查看hitFlag中相應位置的狀態若為false,則成功,否則猜過,此次失敗。

這個方法是最笨的,所以一般聰明的你不會想到。

2.猜中後可以把那個位置的數字設定為 -1,哈哈,瞬間感覺世間好美好啊。但為什麼不把猜過的去掉呢?從而只需判斷你的猜測結果是否在localCells裡就行啦。

3.要是有一種能縮放的數組就好啦,把沒必要的東西都從裡面剔除掉,這樣,程式運行越來越好啊。有沒有呢?還真有一個,java庫中有個ArrayList,非常符合這個要求。

 

 二、ArrayList:哈哈,他的方法如此的完美的適應我們的程式,可是你可能會想,如果我不說,你要從哪裡知道這些東西,這個我會稍後再說一下這個問題。注意一個問題:ArrayList不能直接存primitive類型,只能存對象,你非要存的話,可以寫個封裝類,不過java 5之後,編譯器可以自動把primitive類型轉換為類。現在修改bug,只需稍微改變一下程式就好啦。
import java.util.ArrayList;public class SimpleDotCom {    private ArrayList<String> localCells;    //private int[] dotCom;    //private int numOfHit = 0;    public void setDotCom(ArrayList<String> localCells) {        this.localCells = localCells;    }    //明顯好多啦    public String CheckYourself(String guess) {        String result = "miss";        if (localCells.contains(guess)) {            result = "hit";            localCells.remove(guess);        }        if (localCells.isEmpty()) {            result = "kill";        }        return result;    }}

 測試代碼:

 1 import java.util.*; 2 public class Test { 3         public static void main(String[] args) { 4                 SimpleDotCom dotCom = new SimpleDotCom(); 5                 ArrayList<String> localCells = new ArrayList(); 6                 localCells.add("1"); 7                 localCells.add("2"); 8                 localCells.add("3"); 9                 dotCom.setDotCom(localCells);10                 11                 String result = dotCom.CheckYourself("1");12                 System.out.println("result = " + result);13                 14                 result = dotCom.CheckYourself("1");15                 System.out.println("result = " + result);16                 17                 result = dotCom.CheckYourself("2");18                 System.out.println("result = " + result);19                 20                 result = dotCom.CheckYourself("3");21                 System.out.println("result = " + result);22                 23                 24         }25          26 }

 

 結果就正確啦:簡單版的DotCom已經完成啦,別忘了我們的初衷哦,要寫一個完整版的dotcom,不過代碼稍微有點多而且有點複雜,要靜下心來看,所以就跳轉到另一個隨筆,去看完整版的代碼吧。 下面幾句話中的知識比較細小,但我認為還是不錯的。 在說個問題,java中的類都是存在包(package)中的,使用報的優點有三點:
  • 幫你結構化的管理你的項目,避免一大堆檔案放在一起。
  • 幫你分類,如與圖形庫有關的api,都在javax.swing包中,與事件有關的都在java.awt中。
  • 是你的程式更安全,只有包內的檔案之間是可見的,你可以認為這個功能和c++ c#中的命名空間一樣。

再稍微解釋一下,為什麼有的包名多出個“X”,如swing的javax。名字為“java"的包是剛開始的標準庫, ”java“是後來擴充為java標準庫的。

你使用java類必須使用其全名,比如,你使用的System.out。ArrayList 你必須這樣是使,java.util.ArrayList<String> list = new java.util.ArrayList<String>();。但誠如你所見,你沒有這樣寫,因為檔案前面的 import java.util.*,引入java.util包下的所有東西(不太恰當)。你可能會疑惑 使用String時,你啥也沒import 啊,非常常用的類都在java.lang中,所以java.lang已是預設的包。如果你學過c/c++,你可能認為 import 越多,你的程式越大,那你就錯啦。import xxx。可沒有把xxx下的東西都拷進來,只是幫你需要xxx全名的地方省去這個全名而已。 三、布爾值運算式java中的true and false 不像 c/c++中的布爾值,c/c++中的true 就是整形值 1, false == 0, 而且條件判斷會把非零的值看作真,看看下邊的c語言代碼: 結果:而java中的boolean本身就是一種類型,條件判斷只認boolean類型,上邊的代碼如果是java肯定會錯的。說說強大的布林運算式。如果你學過c語言這就很好理解啦。
  • &&:運算式1 && 運算式2 && 。。。,當各給運算式都為true時,結果為true,否則為false. 如: 1 == 2 && 1 == 1 結果為false, 1 == 1 && 2 > 1 為true.
  • ||:運算式1 || 運算式2 || 運算式3.。。。,當各個運算式有個為true,結果為true,和&&相反。如:1 == 2 || 1 == 1 結果為true, 1 < 0 || 2 == 1為false
  • !:!運算式,把運算式的結果反過來, 如 !1 == 2, 為true, !false, 為true, !true 為false
  • &:和 && 一樣,這點與c語言不一樣,但它常用於二進位與運算這點和c語言。
  • |:同 &

注意:& 與 | 和 && 與 || 不同之處在於, 運算式1 && 運算式2,若運算式1結果為 false,則運算式2就不會執行啦,而 & 的運算式都會執行, | 與 || 同前面所訴。

 

四、java API

API我們封裝了很多常用的功能,避免了我們重複造輪子的工作。我們只需學會怎樣使用api就可以啦(對於我們新手而言),對於小白的我們,how do I go from a need-to-do-something to a-way-to-do-it using the API,有兩種常用的方式,一是買個參考書,根據自己的需要去找想要的api,參考書會為你提供api的使用文法的。

另一種就是html 文檔啦,免費又方面,強烈推薦它,比參考書詳細,而且時效性好,上官方隨時下最新的文檔。

 

 每日一句:

It seems the harder I work, the more luck I have.

越努力越幸運。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.