2019年1月18日 星期五

java - Array 陣列

Array 陣列  =>變數名稱
(一) 多個相同類型的變數 (或 物件 )  (同一機構公司,同組,同一張表單  ,可以宣告使用相同名稱,以整數索引碼去別

舉例: 第一個 陣列
class ex1
{
public static void main(String args[])
{
   //int f1,f2,f3; 
   int [] x = new  int[3];  //初始值 為O
   System.out.println(x[2]);
 
}
}
執行結果:





範例二 :  各項資料類型 初始值
class ex1
{
public static void main(String args[])
{

//int f1,f2,f3;
//各個值 都有不同的起始 數值
//int 初始值為 0
//double 初始值為 0.0
//boolean 初始值為 false
//String 初始值為 空值
int[] x=new int[6];//int
//double[] x=new double[3];  //double
//boolean[] x=new boolean[3]; //boolean
//String[] x=new String[6];   //String

System.out.println(x);
System.out.println(x[0]); 
}

}
執行結果:








I 為int       double  為D   各有不同


( 二 ) 語法: 
      類型 [ ] 陣列名稱 =  new  類型 [ n ] ;
n => 總數量

=> 個別名稱為  陣列名 [  o  ] ,  陣列名 [  i  ] ,  ..............................



( 三 ) Java 的陣列偷過  new 產生,所以也有L
1.stack
2.heap

Ex:


 ( 四 ) 陣列值取出的方式
1. for (       ;            ;                 )

2.for  each
=>for  (類型    變數 :  陣列名 )
{

}

※ 上面的分號 ": " 是 : 指定到此陣列的 ftack 位址  將heap 區變數值 copy 出來,copy前先判斷是否友值

範例:   將陣列打印出來
class ex1
{
public static void main(String args[])
{


int[] x=new int[6];

System.out.println(x);
System.out.println(x[0]);
x[0]=10;
for(int i=0;i<6;i++)   //可透過 if將陣列打印
{
System.out.println("x["+i+"]="+x[i]);
}

System.out.println("========================================");


for(int o:x)   //可以一直打印到 陣列結束  會全抓
{
System.out.println(o);
}


}



}
執行結果:
















範例: 使用 抓去 陣列內數量
class ex1
{
public static void main(String args[])
{
int[] x=new int[7];

    System.out.println(x.length); //會抓取陣列數
                                  //如上面是 7 就會抓取7
System.out.println(x[0]);
x[0]=10;  //第一個 位置的值 
for(int i=0;i<x.length;i++)
{
System.out.println("x["+i+"]="+x[i]);
}

}
}
執行結果:
















( 五 ) 陣列數量 計算
=> 陣列 length

(六) 陣列 初始值建立方式
1) 透過 "new"   結合 初始值
=> 靜態 初始化
2) 透過 " {  } " 結合初始值    //只有給到位置   ,"new" 才會給予值 跟 位置
=> 動態初始值

範例:
class ex1
{
public static void main(String args[])
{
int[] x={10,20,30};    //將數值  放入

System.out.println(x);
System.out.println(x.length);
for(int i=0;i<x.length;i++)
{
System.out.println("x["+i+"]="+x[i]);
}
System.out.println("========================================");
for(int o:x)
{
System.out.println(o);
}
}
}
執行結果:













( 七 ) java.util.Arrays
1) sort
2)birarySearch

( 八 ) 傳值 傳位址 => " = "
1.pass by value  => copy 值.
2.pass by address => 指向 同一位址
=> 回收記憶體 ,  消滅
ps => 回收消滅使用  null



舉例 : 陣列排序
import java.util.Arrays;   //載入
 class ex1
{
public static void main(String args[])
{
int[] x={52,65,74,66,20};  //放入一個隨機數的陣列

Arrays.sort(x);  //使用 Arrays.sort  排序

for(int o:x) //  會將抓去陣列內所有數字
{
System.out.println(o);
}



}
}
執行結果:













舉例:  檢查數列內的值
import java.util.Arrays;   //載入
 class ex1
{
public static void main(String args[])
{
int[] x={52,65,74,66,20};  //放入一個隨機數的陣列

Arrays.sort(x);  //使用 Arrays.sort  排序

for(int o:x) //  會將抓去陣列內所有數字
{
System.out.println(o);
}

System.out.println("========================================");

        // Arrays.binarySearch 可檢查陣列 內的數 如果沒有返回 負數

System.out.println(Arrays.binarySearch(x,65)); //檢查有沒有65 的數字 有就返回位置

System.out.println(Arrays.binarySearch(x,53));  //檢查有沒有53 的數字 沒有返回負數

}
}
執行結果:


範例:  null 與 傳值
class ex1
{
public static void main(String args[])
{
int[] x={10,20,30};
int[] y={40,50,60};

System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("x[0]="+x[0]);
System.out.println("y[0]="+y[0]);
System.out.println("========================");

//x=y;
x[0]=y[0];  //如果 傳值 就是 copy 值
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("x[0]="+x[0]);
System.out.println("y[0]="+y[0]);
System.out.println("========================");
y[0]=100;
System.out.println("x[0]="+x[0]);
System.out.println("y[0]="+y[0]);
x = null ;  //會將記憶整個拿掉


System.out.println(x);  //會輸出 null

//System.out.println(x[0]);
//上面編譯會過 但是輸出的值 為空值
System.out.println(x.length);
//編譯會過 但無法輸出 因為length 只要連接陣列 就可以
//輸出的值為  空值 null


/*
int x=10;
int y=20;

System.out.println("x="+x);
System.out.println("y="+y);

System.out.println("========================");
x=y;                      //如果傳位置  就只有改變位置
System.out.println("x="+x);
System.out.println("y="+y);
System.out.println("========================");
y=100;
System.out.println("x="+x);
System.out.println("y="+y);
*/

}



}
執行結果:














( 九 ) 多維陣列
1. 樹狀結構
    分組的編碼方式
2.多個階段分組方式
Ex. : 2維陣列  =>  2階段多組

語法:
類型 [ ] [  ]  陣名  = new 類型 [ n ]  [ m ]
=> 先分  n 組   ,每組  m 個


例圖:


=> int [ ] [ ]   = new  int  [ 2 ] [3 ]














例子:
class ex1
{
public static void main(String args[])
{
/*int[] a=new int[3];
int[] b=new int[3];*/

int[][] x=new int[2][3]; //先分2組 每組3個
}
}

範例:
class ex1
{
public static void main(String args[])
{
/*int[] a=new int[3];
int[] b=new int[3];*/

int[][] x=new int[2][3];

System.out.println(x);
System.out.println(x[0]);      //可以通過編譯 出來是地址
                               // 不管有幾層 最後面 [] 是值
System.out.println(x[0][0]);   //打印出來是值
System.out.println(x[1]);   
 
System.out.println(x.length);
System.out.println(x[0].length);
//System.out.println(x[0][0].length); //報錯因為已經沒辦法往下才

System.out.println("=================================");

for(int i=0;i<x.length;i++)   //可以將雙層內容打印出來
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}


}



}
執行結果:



範例:

class ex1
{
public static void main(String args[])
{
int[][] x=
{
{10,20,30},
{85,74,21},
};
for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}

}

}
執行結果:









3.不等長(非對稱) 多維陣列
a)














例子: 不對等
class ex1
{
public static void main(String args[])
{
int[][] x=
{
{10,20,30,85},  //不對等
{74,21},
};
for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}

}



}
執行結果:











範例: 另一種放入
class ex1
{
public static void main(String args[])
{
int[][] x=new int[2][];//x[0],x[1]
x[0]=new int[4];
x[1]=new int[2];


for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}
}

}
執行結果:








範例: 傳值方式
class ex1
{
public static void main(String args[])
{
int[][] x=new int[2][];//x[0],x[1]
//x[0]=new int[4];
//x[1]=new int[2];
int[] y1={10,52,63,74};
int[] y2={41,52};
x[0]=y1;   //如果使用上方直接打印 會報錯
           //可以使用 傳值的方式  將位置傳入
x[1]=y2;

for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
System.out.println("x["+i+"]["+j+"]="+x[i][j]);
}

}

}
}
執行結果:










b)

例子一  可以這樣創建
class ex1
{
public static void main(String args[])
{
int[][][] x=new int[2][][];
x[0]=new int[3][];
x[0][0]=new int[2];
x[0][1]=new int[3];
x[0][2]=new int[4];

x[1]=new int[2][3];


}
}
範例二 : 應運 加入數值
class ex1
{
public static void main(String args[])
{
int[][][] x=new int[2][][];
/*
x[0]=new int[3][];
x[0][0]=new int[2];
x[0][1]=new int[3];
x[0][2]=new int[4];

x[1]=new int[2][3];
*/

int[] y1={10,20};
int[] y2={65,85,74};
int[] y3={77,85,96,36};

int[][] y4=
{
{52,65,74},
{77,65,96},
};
x[0]=new int[3][];

x[0][0]=y1;
x[0][1]=y2;
x[0][2]=y3; //這邊看位置  不是數量 數量已經在上面附值了

x[1]=y4;


for(int i=0;i<x.length;i++)
{
for(int j=0;j<x[i].length;j++)
{
for(int k=0;k<x[i][j].length;k++)
{

System.out.println("x["+i+"]["+j+"]["+k+"]="+x[i][j][k]);

}

System.out.println();

}


}


}
}
執行結果




















.結合物件導向  應用

1.先定義 陣列變數名稱
2.在個實例化 "new "  物件內容






























例子:
class student
{
private String name;
private int chi;
private int eng;
private int sum;

student(String name,int chi,int eng)
{

this.name=name;
this.chi=chi;
this.eng=eng;

sum=chi+eng;

}

String show()
{
return "名 :"+name+
"\t國文:"+chi+
"\t英文:"+eng+
"\t總分:"+sum;

}

}

class add
{
public static void main(String args[])
{
/*
student[] s=new student[3];//s[0],s[1],s[2]-->名字
s[0]=new student("a1",75,85);
s[1]=new student("a2",75,85);
s[2]=new student("a3",75,85);
*/

student[] s=
{
new student("a1",75,85),
new student("a2",75,85),
new student("a3",75,85),

};
System.out.println(s);
System.out.println(s[0]);
System.out.println(s[0].show());

System.out.println("====================");

for(int i=0;i<s.length;i++)
{
System.out.println("s="+s+"\ts["+i+"]="+s[i]+"\t"+s[i].show());
}

/*
student s1=new student("a1",75,85);
student s2=new student("a2",75,85);
student s3=new student("a3",75,85);

System.out.println(s1.show());
System.out.println(s2.show());
System.out.println(s3.show());
*/


}

}

執行結果:


不對稱
新增說明文字




















class add2
{
 public static void main(String args[])
 {
  /*
  student[][] s=new student[2][];
  s[0]=new student[2];
  s[1]=new student[3];
  
  
  s[0][0]=new student("a",74,85);
  s[0][1]=new student("a",74,85);
  
  s[1][0]=new student("a",74,85);
  s[1][1]=new student("a",74,85);
  s[1][2]=new student("a",74,85);
  
  */
  
  student[][] s=
  {
   {
    new student("a",74,85),
    new student("a",74,85)
    
    
   }
   ,
   
   {
    new student("b1",74,85),
    new student("b2",74,85),
    new student("b3",74,85),
    
   }
   
   
   
  };
  
  for(int i=0;i<s.length;i++)
  {
   for(int j=0;j<s[i].length;j++)
   {
    
    System.out.println("s["+i+"]["+j+"]="+s[i][j]+"\t"+s[i][j].show());
    
   }
   
   
  }
 
 
 }
}
執行結果:







沒有留言:

張貼留言