我的車就差一個輪子啦,造好輪子,我就飛上天與太陽肩並肩啦,想想都激動。什麼你要自己造輪子,是不是傻,商店裡不都是別人造好的嗎,又好又方便,只需一點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.
越努力越幸運。