2015年6月24日 星期三

6 欄位及資料型別(3)

6     欄位及資料型別(3)
參考資料型別(Reference Types)
包含三類:內建物件之矩陣(陣列)、字串,與自行設計之建構物件(含類別及介面)
【矩陣(Array)
[一維矩陣]
宣告格式:資料型別[ ] 陣列名稱、資料型別 陣列名稱[ ]
資料型別 [ ]陣列名稱等,普遍採用- 資料型別[ ] 陣列名稱。
例:int[ ] aint a[ ]int [ ]a
宣告矩陣長度:建立物件時指定,a = new int[10]時變數長度為10,即有10個元素。矩陣元素位址由0起算,如下列10個元素位址為由0~9
a[0]
a[1]
a[2]
a[03]
a[04]
a[5]
a[6]
a[7]
a[8]
a[9]
a[0]a[1]…a[9]存放參考位址,可依此位址找到相對應之值如下1020…100

   a[0]           a[1]          a[2]          a[3]          a[4]         a[5]          a[6]          a[7]          a[8]        a[9]
10
20
30
40
50
60
70
80
90
100
矩陣元素值之指定方式
  個別指定:a[0]=10,  a[1]=20, a[2]=30 ........ , a[9]=100;
  宣告時集體指定:int[ ] a = {10,20,30,40,50,60,70,80,90,100};
  建立物件時指定:int[ ] b;  b = new int[ ] {200,300}
[一維矩陣內建物件例]
a[0]                                                                 a[1]
10
20
class Array1 {
public static void main(String[] args) {
int[] a;                       //宣告整數資料型別一為陣列a
a = new int[2];                //建立物件時指定陣列元素個數2
a[0] = 10;                    //指定第一個元素的值10
a[1] = 20;                    //指定第二個元素的值20
System.out.println("a[0] = "+a[0]);
System.out.println("a[1] = "+a[1]);  }  }
命令提示字元下輸入C:\js>java Array1
執行結果:
a[0] = 10
a[1] = 20



[一維矩陣建構物件例]
class MyNumber1 {
  int number;
}
class Array1 {
public static void main(String[] args) {
MyNumber1[ ] b;              //MyNumber1為自行設計之建構物件
b = new MyNumber1 [2];
b[0] = new MyNumber1 (); //自行設計之建構物件需以new對每一矩陣元素
b[1] = new MyNumber1 (); //建立物件
b[0].number = 30;
b[1].number = 40;
System.out.println("b[0].number= "+b[0].number);
System.out.println("b[1].number= "+b[1].number);
}
}
執行結果:C:\js>java Array1
b[0].number= 30
b[1].number= 40

矩陣可代表同類型(資料型別)資料
MyNumber1[ ] b ;                                             MyNumber1 b;
b = new MyNumber1[2] ;                                 MyNumber1 c;
b[0] = new MyNumber1() ;  可達相同功能    b = new MyNumber1( );
b[1] = new MyNumber1() ;  ----------------à   c = new MyNumber1( );
b[0].number = 30;                                             b.number = 30;
b[1].number = 40;                                             c.number = 40;

*b[0]b[1]存放MyNumber1物件之參考位址。



[使用{ }指定各矩陣元素之值]
class Array3 {
  public static void main (String[] args) {
    int[] f = {10,20};    //指定方法一

    int[] g;
    g = new int[ ] {30,40};  //指定方法二

    System.out.println("f[0] = "+f[0]);
    System.out.println("f[1] = "+f[1]);
    System.out.println("g[0] = "+g[0]);
    System.out.println("g[1] = "+g[1]);
  }
}
命令提示字元下輸入C:\js>java Array3
執行結果:
f[0] = 10
f[1] = 20
g[0] = 30
g[1] = 40



[多維矩陣(Multidimensional Array)]
分為對稱多維矩陣及非對稱多維矩陣。
[對稱多維矩陣(Rectangular Multidimensional Array)]
第二維之矩陣元素個數相同。
宣告格式:資料型別[ ][ ][ ].... 陣列名稱
例:int[ ][ ] aint a[ ][ ][ ]
宣告矩陣各維長度:建立物件時指定,a = new int[3][9]時第一維長度為3,第二維長度為9,共有27個元素。矩陣元素位址為000102.....08101213.....18202122.....28,如下列二維矩陣:
二維矩陣例:int[3][9]
a[0][0]
a[0][1]
a[0][2]
a[0][3]
a[0][4]
a[0][5]
a[0][6]
a[0][7]
a[0][8]
a[1][0]
a[1][1]
a[1][2]
a[1][3]
a[1][4]
a[1][5]
a[1][6]
a[1][7]
a[1][8]
a[2][0]
a[2][1]
a[2][2]
a[2][3]
a[2][4]
a[2][5]
a[2][6]
a[2][7]
a[2][8]
矩陣元素值之指定方式int[2] [3] a個別指定:a[0][0]=10, a[0][1]=20, a[0][2]=30, a[1][0]=40,a[1][1]=50,a[1][2]=60;
宣告時集體指定:使用{ }int[ ][ ] a = {{10,20,30},{40,50,60}};
建立物件時指定:使用{ }int[ ][ ] b; b = new int[ ][ ] {{10,20,30},{40,50,60}};
對稱多維矩陣內建物件例:
class Marray4 {
  public static void main(String[] args) {
    int[][] a;      
    a = new int[2][2];
    a[0][0] = 10;
    a[0][1] = 20;
    a[1][0] = 30;
    a[1][1] = 40;
    System.out.println("a[0][0] = "+a[0][0]);
    System.out.println("a[0][1] = "+a[0][1]);
    System.out.println("a[1][0] = "+a[1][0]);
    System.out.println("a[1][1] = "+a[1][1]);
  }
}
命令提示字元下輸入C:\js>java Marray4
執行結果:
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 40
[對稱多維矩陣建構物件例]
class MyNumber2 {
int n;
}
class Marray5 {
public static void main(String[] args) {
MyNumber2 [][] b;
        b = new MyNumber2 [2][2];
b[0][0] = new MyNumber2();
b[0][1] = new MyNumber2();
b[1][0] = new MyNumber2();
b[1][1] = new MyNumber2();
b[0][0].n = 50;
b[0][1].n = 60;
b[1][0].n = 70;
b[1][1].n = 80;
System.out.println("b[0][0].n = "+b[0][0].n);
System.out.println("b[0][1].n = "+b[0][1].n);
System.out.println("b[1][0].n = "+b[1][0].n);
System.out.println("b[1][1].n = "+b[1][1].n);
}
}
命令提示字元下輸入C:\js>java Marray5
執行結果:
b[0][0].n = 50
b[0][1].n = 60
b[1][0].n = 70
b[1][1].n = 80



{ }設定對稱多維矩陣各元素之值(方式1)
class Marray61 {
public static void main (String[] args) {
    int[][] a = {{10,20},{30,40}};

    System.out.println("a[0][0] = "+a[0][0]);
    System.out.println("a[0][1] = "+a[0][1]);
    System.out.println("a[1][0] = "+a[1][0]);
    System.out.println("a[1][1] = "+a[1][1]);
}
}
命令提示字元下輸入C:\js>java Marray61
執行結果:
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 40

{ }設定對稱多維矩陣各元素之值(方式2)
class Marray62 {
public static void main (String[] args) {
      int[][] a ;
      a = new int [2][2];
      a[0] = new int[] {10,20};
      a[1] = new int[] {30,40};
      System.out.println("a[0][0] = "+a[0][0]);
      System.out.println("a[0][1] = "+a[0][1]);
      System.out.println("a[1][0] = "+a[1][0]);
      System.out.println("a[1][1] = "+a[1][1]);
}
}
命令提示字元下輸入C:\js>java Marray62
執行結果:
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 40



[非對稱多維矩陣(Non-Rectangular Multidimensional Array)]
第二維之矩陣元素個數不同。
宣告格式:資料型別[ ][ ] 陣列名稱,例如int[ ][ ] a;
宣告矩陣各維長度:建立物件時指定,第一維指定元素個數,第二維暫不指定元素個數,於第二維建立物件時分別指定。
例:a=new int[2][ ];  a[0]=new int[2];  a[1]=new int[3]
如下列二維非對稱矩陣:
a[0][0]
a[0][1]

a[1][0]
a[1][1]
a[1][2]
矩陣元素值之指定方式int[2] [3] 
個別指定:a[0][0]=10, a[0][1]=20, a[1][0]=30,a[1][1]=40,a[1][2]=50;
宣告時集體指定:使用{ }int[ ][ ] a = {{10,20},{30,40,50}};
建立物件時指定:使用{ }int[ ][ ] b; b[0] = new int[ ]{10,20};
                                                                 b[1] = new int[ ]{30,40,50};
class Marray7 {
  public static void main(String[] args) {
    int[][] a;
    a = new int[2][ ];
    a[0] = new int[2];
    a[1] = new int[3];
    a[0][0] = 10;
    a[0][1] = 20;
    a[1][0] = 30;
    a[1][1] = 40;
    a[1][2] = 50;
    System.out.println("a[0][0] = "+a[0][0]);
    System.out.println("a[0][1] = "+a[0][1]);
    System.out.println("a[1][0] = "+a[1][0]);
    System.out.println("a[1][1] = "+a[1][1]);
    System.out.println("a[1][2] = "+a[1][2]);  }  }

命令提示字元下輸入C:\js>java Marray7
執行結果:
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 40
a[1][2] = 50
{ }設定各元素之值(方式1)
class Marray8 {
  public static void main (String[] args) {
    int[][] a = {{10,20},{30,40,50}};

    System.out.println("a[0][0] = "+a[0][0]);
    System.out.println("a[0][1] = "+a[0][1]);
    System.out.println("a[1][0] = "+a[1][0]);
    System.out.println("a[1][1] = "+a[1][1]);
    System.out.println("a[1][2] = "+a[1][2]);  }  }

命令提示字元下輸入C:\js>java Marray8
執行結果:
a[0][0] = 10
a[0][1] = 20
a[1][0] = 30
a[1][1] = 40
a[1][2] = 50

{ }設定各元素之值(方式2)
class Marray9 {
  public static void main (String[] args) {
    int[][] a;
    a = new int[2][];
    a[0] = new int[] {101};
    a[0] = new int[] {202,302,402};
    System.out.println("a[0][0] = "+a[0][0]);
    System.out.println("a[1][0] = "+a[1][0]);
    System.out.println("a[1][1] = "+a[1][1]);
    System.out.println("a[1][2] = "+a[1][2]);  }  }

命令提示字元下輸入C:\js>java Marray9
執行結果:
a[0][0] = 101
a[1][0] = 202
a[1][1] = 302
a[1][2] = 402



【字串(String)
以內建物件String為資料型態(Data Type),宣告字串變數。
String s = “abcd” ;

或使用new建立內建物件,產生包含指定字串之新物件。
String t = new String( “abcd” ) ;

class String1 {
  public static void main (String[] args) {
    String s;
    s = "abcd";   //或二行合併 String s = "abcd";
    System.out.println("s = "+s);

    String t;  
    t = new String("wxyz"); //或二行合併 String t = new String("wxyz");
    System.out.println("t = "+t);
  }
}
命令提示字元下輸入C:\js>java String1
執行結果:
s = abcd
t = wxyz






為自行設計之建構物件,即自建類別物件。
class MyNumber8 {
int i;
}

class Obj2 {
public static void main(String[] args) {
      int j;
      j=3;
      MyNumber8 a;
      a = new MyNumber8(); 
      a.i = 5;

      System.out.println("j = "+j);
      System.out.println("a.i = "+a.i);
}
}
命令提示字元下輸入C:\js>java Obj2
執行結果:
j = 3
a.i = 5




沒有留言:

張貼留言