我的車就差一個輪子啦,造好輪子,我就飛上天與太陽肩並肩啦,想想都激動。什麼你要自己造輪子,是不是傻,商店裡不都是別人造好的嗎,又好又方便,只需一點money,你沒有money,那你只能做個安靜的美男子啦。幸運的是編程世界中的輪子不需要money,今天就來看看如何調用庫中的輪子。
今天的內容:
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)中的,使用報的優點有三點:
再稍微解釋一下,為什麼有的包名多出個“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全名的地方省去這個全名而已。注意:& 與 | 和 && 與 || 不同之處在於, 表達式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.
越努力越幸運。