第16課 數組 2011.8.1
介紹Array。int[] myArr=new int[5];可以是int,double這類變數也可以是對象。對於對象,數組儲存物件的指標。對於int之流,分配空間,儲存數值,但是要注意即使是這些基本類型,myArr實際是指向數組的指標,是不過每個entry不是儲存物件的指標,而是實際的值。
出來使用new來建立數組,另一個方式是:int[] myArr={0,3,5,7,8};常用於定義某些常量。
post increment,例如x++,int x = 5; int y = x ++結果是y=5(將x加一,但是返回原來的x值),採用pre increment,即++x,y==x,結果是y=6。要知曉分清,因為在數組中會用到。例如實際使用的size和定義分配的size可能不一致的時候(只確定MAX _SIZE),我們可能會使用while來替代for(當然應當用for,因為for不會出現超越邊界的情況,更為安全,這裡只是舉例而已),例如myArr[num++]=100;是將100賦值給myArr[num],然後運行num++,而num儲存當前處理的數目的多少。
Java中定義數組和c有一些區別,java的數組是帶尺寸的屬性(不是方法),例如上面的例子,可以用myArr.length來擷取。
ArrayList:上面的方式,在定義時需對明確講出數組的大小,在Java中給予一個類ArrayList,實現動態長度的資料,具體如何?不清楚,但在C中有鏈表來實現相似的功能。定義方式:ArrayList<String> strlist=new ArrayList<String>();可以使用add,remove等,具體查reference。
第17課 多維陣列和ArrayList 2011.8.2、3
多維數值int[][]之類的方式來進行定義。一般而言,最常用的一維資料,次則兩維。
例如在ArrayList中,有某個方法是boolean add(<T> element),T就是template(模板)的type類型,反正都是T開頭。介紹了ArrayList的method。要注意ArrayList中的T是Object,也就是我們不能將int,double之類作為它的元素,需要使用Integer,Double,將一個int賦值成為一個Interger,稱為Boxing,例如,int x = 5; Integer y = new Integer(x);。取出值,稱為unboxing,例如x =
y.intValue();。在java中,box,unbox是系統可以自動完成。對於Integer是沒有setValue()的類似的方式,也就是它只有一個值,而且是不可以改變,和String一樣都是immutable。改變需產生一個新的Integer對象,這樣使得Integer的形式更加接近int,在參數的傳遞中。
然則,我們需要注意,ArrayList<Integer>,如果某個單元的值需要加一,不能直接加一,需要set(index, get(index)+1);
Java對於多維陣列的長度問題:int[][][] x=new int[3][4][5],那麼x.length = 3,x[0].length=4, x[0][0].length=[5],所以Java和緯度數組如何理解各位的順序需要注意,例如有100個學生,每個學生修行2門課程,設定一個2d數組來記錄學生的成績,int[][] x = new int[100][2],這樣以學生為單位,int[][] x= new int[2][100],這樣以課程為單位。不過其實都無所謂,只是我們需要瞭解length會返回那個值就可以了。
GImage可通過getPixelArray()方法獲得int[][],對應每一個像素的,是一個RGB的int值,有點意思,記錄下來。
第18課 多維陣列和Debuging 2011.8.3
對於2D數值int x[2][100],可以看作有array是有2個元素的數值,每個元素是一個int[100]的數array,因此我們也可以理解x.length=2, x.length[0] = 100,對於多維數值,往下可以一級一級地分下去。x[3][4][5],x有3個元素,每個元素是一個[4][5]的數組,如是一維一維下去。
例如我們要掃描x[2][100],用一個for嵌套,i<x.length;j<x[0].length,一般我們不應直接寫2和100,因為一旦修改x的size,程式需要做修改,這是非常糟糕的編程方式。
對於ArrayList的好處是動態大小,有多個方案可以調用,弱點是缺乏效率,語句繁複,如果我們知曉有固定的大小,一般情況應當使用array,而不是ArrayList。
調測是開發的很重要一個環境。Design是Architect,Coding-Engineer,Testing-Vandal,Debuging -Detective。對於程式,有4D步驟:Desing-》Development-》Debuging ->Deployment,某一步的錯誤,在下一步中會10倍的花費來fix。對於編程,通常錯誤會出現在:1、bad value;2、faulty logic、3、unwarranted assumptions,當出現錯誤時,產生錯誤的原因通常simple,在處理是要有條理,不要想當然地認為錯誤在哪裡,如果那裡沒有,就需要到其他地方找找,編程要critical,可能錯誤只是一時疏忽,有錯誤不要恐慌(don't
panic)。
對於調測,可以在使用println,在method之間之後列印,看看允許狀態,可以列印一些變數值,看看是否符合我們預期,在Eclipse等工具都會有debuging的調測,設定breakpoint來配合跟蹤。
相關連結:我的與編程思想相關的文章