程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> 初涉java庫--ArrayList,java--arraylist

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

編輯:JAVA綜合教程

初涉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.

越努力越幸運。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved