JAVA程式練習
儲存程式碼範例
2016年12月3日 星期六
用四個相同型態的變數傳遞到Args()函數中,並計算總和
package tw.leonchen.myproject.oop.array;
/*
 * (型態... 參數名稱)==>用再傳相同型態,但個數不同時
 * 傳遞過來的參數會轉成陣列儲存
 * EX:用四個相同型態的變數傳遞到Args()函數中,並計算總和
 * 
 */
public class TestVarArgs {
 public void Args(int ...num){  //傳遞的參數會轉為一維陣列
  int total=0;
  for(int i=0;i<num.length;i++){ //由於是陣列,因此需要用for迴圈帶出
   total+=num[i];
  }
  System.out.println("total="+total);
 }
 
 public static void main(String[] args) {
  
  TestVarArgs arg1=new TestVarArgs();
  
  arg1.Args(1,2,3,4); //只要是傳遞int型態的都可,不管有無參數
  //arg1.Args(1); //如果再呼叫一次,它會另外計算結果,不會累加
 }
}
String判別是否符合條件
package tw.leonchen.myproject.oop;
/* 判斷字串:abc
 * (a)是否符合a-z範圍,且只有一個字母
 * (b)是否符合a-z範圍,且只有三個字母
 * 
 * 判斷字串:M123
 * (a)是否有1個字母為[a-zA-Z],3個字為0~9
 * (b)是否有1個字母為[a-zA-Z]且不是def,3個字為0~9
 * (c)是否有1個字母為[def]之外的,3個字為0~9
 */
public class TestString2 {
public static void main(String[] args) {
 String data="abc";
 boolean flag1=data.matches("[a-z]"); 
 //是否有1個字母為a-z(因為後面沒寫{}代表1)
 System.out.println(flag1);
  
 boolean flag2=data.matches("[a-z]{3}"); //是否有三個字母為a-z
 System.out.println(flag2);
  
 String exp="M123";
 //[^def]代表是除了def外的字元
 boolean flag3=exp.matches("[a-zA-Z]{1}[0-9]{3}");
        //是否有1個字母為[a-zA-Z],3個字為0~9
 boolean flag4=exp.matches("[a-zA-Z && [^def]]{1}[0-9]{3}");
        //是否有1個字母為[a-zA-Z]且不是def,3個字為0~9
 boolean flag5=exp.matches("[^def]{1}[0-9]{3}");
        //是否有1個字母為[def]之外的,3個字為0~9
  System.out.println(flag3);
  System.out.println(flag4);
  System.out.println(flag5); 
 }
}
2016年12月2日 星期五
ContinueLabel
package tw.leonchen.myproject.flowcontrol.loop;
/*
 * break and continue label
 */
public class TestContinueLabel 
{
 public static void main(String[] args){
 test: 
 for(int i=1;i<=5;i++){
 for(int j=1;j<=5;j++){
  if(i==2 && j==3){
  continue test;  //會回到最接近標籤的迴圈(i),i+1=3後繼續執行迴圈
  // continue ; //會回到當層迴圈的起頭j+1=4後再繼續執行迴圈
  }
  System.out.println("i="+i+" j="+j);  
 }
}
   System.out.println("finished");
   
}
}
BreakLabel
package tw.leonchen.myproject.flowcontrol.loop;
/*
 * break  label
 */
public class TestBreakLabel 
{
 public static void main(String[] args)
 {
test:for(int i=1;i<=5;i++){
 for(int j=1;j<=5;j++){
 if(i==2 && j==3){
 break test ; 
//test是個標籤,當break test時
//返回至test標籤處,之後整個test區塊不執行而跳過
//所以這個程式System.out.println("i="+i+" j="+j);不會被執行。 // break; //如果break沒加標籤test就只是跳離當層迴圈(j),回到i迴圈+1從i=3開始繼續執行 } System.out.println("i="+i+" j="+j); } } System.out.println("finished"); } }
//所以這個程式System.out.println("i="+i+" j="+j);不會被執行。 // break; //如果break沒加標籤test就只是跳離當層迴圈(j),回到i迴圈+1從i=3開始繼續執行 } System.out.println("i="+i+" j="+j); } } System.out.println("finished"); } }
2016年11月28日 星期一
驗證是否符合身分證字號命名原則
package lab1128.id;
/*
 * 字串"A123456789",驗證是否符合身分證字號命名原則
 */
public class IdChecker {
 
public static void main(String[] args) {
IdChecker idcheck=new IdChecker(); //建立物件並呼叫預設建構子
boolean result=idcheck.check("A123456789");
System.out.println("result="+result);
}
private int convert(char c){ c=Character.toUpperCase(c);//不論是大寫或小寫,通通轉成大寫 if(c=='A'){ return 10; } else if(c=='B'){ return 11; } else if(c=='C'){ return 12; } else if(c=='D'){ return 13;
}
else if(c=='E'){ return 14; } else if(c=='F'){ return 15; } else if(c=='G'){
private boolean isLegalFormat(String s){ //檢查身分證字號格式
}
}
for(int i=1;i<10;i++){
}  
return true; 
  
//傳遞身分證字號到isLegalFormat函數檢查是否符合命名原則(英文+數字)
if(!this.isLegalFormat(id)){
//if要true才能執行,所以當回傳this.isLegalFormat(id)=false
//前面要加上!使if條件能執行
return false;
}
int Data[]=new int[9];
for(int i=0;i<Data.length;i++){
Data[i]=Integer.parseInt(id.substring(i+1,i+2)); //轉換字串為整數
//Data[0]=id字串的第2個數字,id=A123456789 1=Data[0] 2=Data[1] 3=Data[2] 4=Data[3]
int CheckCode = (10-(Y2 % 10)) % 10;
if(CheckCode==Data[8]){
}
return false;     
private int convert(char c){ c=Character.toUpperCase(c);//不論是大寫或小寫,通通轉成大寫 if(c=='A'){ return 10; } else if(c=='B'){ return 11; } else if(c=='C'){ return 12; } else if(c=='D'){ return 13;
}
else if(c=='E'){ return 14; } else if(c=='F'){ return 15; } else if(c=='G'){
return 16;
}
else if(c=='H'){
return 17;
}
else if(c=='I'){
return 34;
}
else if(c=='J'){
return 18;
}
else if(c=='K'){
return 19;
}
else if(c=='L'){
return 20;
}
else if(c=='M'){
return 21;
}
else if(c=='N'){
return 22;
}
else if(c=='O'){
return 35;
}
else if(c=='P'){
return 23;
}
else if(c=='Q'){
return 24;
}
else if(c=='R'){
return 25;
}
else if(c=='S'){
return 26;
}
else if(c=='T'){
return 27;
}
else if(c=='U'){
return 28;
}
else if(c=='V'){
return 29;
}
}
else if(c=='W'){
return 32;
}
else if(c=='X'){
return 30;
}
else if(c=='Y'){
return 31;
}
else if(c=='Z'){
return 33;
}    
return 0; 
} 
if(s==null){ //如果字串是空值
return false;
if(s.length()!=10){ //長度沒有等於10
return false;
char ch=s.charAt(i); //取字串1~9
if(!Character.isDigit(ch)){ //檢查是否為數字0~9
return false;
}  
}
public boolean check(String id){
if(!this.isLegalFormat(id)){
//if要true才能執行,所以當回傳this.isLegalFormat(id)=false
//前面要加上!使if條件能執行
return false;
}
char ch=id.charAt(0); //取得字串id的第0個字元
int D0=this.convert(ch); //呼叫convert函數並傳字元ch
int x1=(D0/10); //取得十位數
int x2=(D0); //取得個位數
int Data[]=new int[9];
//for(int i=0;i<Data.length;i++){   
//Data[i]=Character.getNumericValue(id.charAt(i+1)); //轉換字元為整數
//}
for(int i=0;i<Data.length;i++){
Data[i]=Integer.parseInt(id.substring(i+1,i+2)); //轉換字串為整數
//Data[0]=id字串的第2個數字,id=A123456789 1=Data[0] 2=Data[1] 3=Data[2] 4=Data[3]
}
int Y2 = x1+ 9*x2+ 8*Data[0]+ 7*Data[1]+ 6*Data[2]+ 5*Data[3]+4*Data[4]+ 3*Data[5]+ 2*Data[6]+ Data[7];
//公式:Y = X1+ 9*X2+ 8*D1+ 7*D2+ 6*D3+ 5*D4+4*D5+ 3*D6+ 2*D7+ D8
 
System.out.println("CheckCode="+CheckCode);
return true;
}
} 
2016年11月27日 星期日
利用父類別變數存取子類別成員的練習
/*
 hw10_11,利用父類別變數存取子類別成員的練習
 (a)試定義一個圓形類別CCircle,它繼承自CShape類別,並改寫了父類別的area() method,可用來傳回圓形物件的面積。 
(b)試定義一個正方形類別CSquare,它也繼承自CShape類別,同時改寫了父類別的area() method,可用來傳回正方形物件的面積。 
(c)試定義一個三角形類別CTriangle,它也繼承自CShape類別,同時改寫了父類別的area() method,可用來傳回三角形物件的面積。 
(d)試利用 (a)~(c) 所定義的類別,建立圓形、正方形與三角形物件各一個,其中所有的引數(如半徑、邊長或三角形的底和高等)請自行設定。 
(e)試撰寫一個largest() method,可用來找出 (d) 中的所有物件裡,面積的最大值。 
 */
class CShapehw10_11  //父類別Cshape10_11
{
  public double area()
  {
 return 0.0;
  }
//比較三個面積的大小,因為CShapehw10_11 s[]陣列是在static類別裡宣告
//所以void前面必須加static
 public static void largest(CShapehw10_11 s[])  
 {
 double max=0.0;
 
for(int i=0;i<s.length;i++){  
 if(s[i].area()>max){  //s[i].area()==>呼叫出每個陣列的面積
 max=s[i].area();
 } 
}
   System.out.println("面積最大的是"+max);
}
}
class  CCirclehw10_11  extends CShapehw10_11  //子類別 CCirclehw10_11
{ 
private double pi;             
private double radius;
      
public CCirclehw10_11(double p ,double r){ /子類別CCirclehw10_11建構元
pi=p;
radius=r; 
}
 
public double area(){
return pi*radius*radius;  //傳回圓面積
}
}
class  CSquarehw10_11  extends CShapehw10_11  //子類別 CSquarehw10_11
{ 
private double length;
private double width;
public CSquarehw10_11(double l ,double w){//子類別CSquarehw10_11建構元
length=l;
width=w;
}
public double area(){
return length*width; //傳回正方形面積
}
}
class  CTrianglehw10_11  extends CShapehw10_11  //子類別CTrianglehw10_11
{ 
private double base=4.0;
private double height=10.0;
public  CTrianglehw10_11(double b ,double h){  //子類別CTrianglehw10_11建構元
base=b;
height=h;
}
public double area() {
return (base*height)/2;  //傳回三角形面積
}
}
public class hw10_11
{
public static void main(String args[]){
//CCirclehw10_11 cir=new CCirclehw10_11(3.0,4.0);
//cir.area();
  
//CSquarehw10_11 cqr=new CSquarehw10_11(5.0,6.0);
/cqr.area();
  
//CTrianglehw10_11 ctr=new CTrianglehw10_11(7.0,8.0);
//ctr.area();
  //透過父類別變數存取子類別物件的成員  
CShapehw10_11 shp[]=new  CShapehw10_11[3];  
//傳值到CCirclehw10_11(double p ,double r)建構元,並將回傳面積儲存在shp[0]
shp[0]=new CCirclehw10_11(3.0, 4.0);  
System.out.println("圓形面積="+shp[0].area());
//傳值到CSquarehw10_11(double l ,double w)建構元,並將回傳面積儲存在shp[1]
shp[1]=new CSquarehw10_11(5.0,6.0);   
System.out.println("正方形面積="+shp[1].area());
//傳值到CTrianglehw10_11(double b ,double h)建構元,並將回傳面積儲存在shp[2]
shp[2]=new CTrianglehw10_11(7.0,8.0); 
System.out.println("三角形面積="+shp[2].area());
CShapehw10_11.largest(shp);//將陣列傳遞到largest()函數內比較大小  
}
}
訂閱:
意見 (Atom)