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'){
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;
}
private boolean isLegalFormat(String s){ //檢查身分證字號格式
if(s==null){ //如果字串是空值
return false;
}
if(s.length()!=10){ //長度沒有等於10
return false;
}
for(int i=1;i<10;i++){
char ch=s.charAt(i); //取字串1~9
if(!Character.isDigit(ch)){ //檢查是否為數字0~9
return false;
}
}
return true;
}




public boolean check(String id){
//傳遞身分證字號到isLegalFormat函數檢查是否符合命名原則(英文+數字)

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
int CheckCode = (10-(Y2 % 10)) % 10;
System.out.println("CheckCode="+CheckCode);
if(CheckCode==Data[8]){
return true;
}
return false;
}
}

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()函數內比較大小
} }

設計abs函數可接收int、float、double型態三組,並傳回絕對值

package Method; /* * 設計abs函數可接收int、float、double型態三組,並傳回絕對值 */ public class hw7_26 { public static void main(String[] args) { System.out.println("-6的絕對值="+abs(-6)); System.out.println("-3.5f的絕對值="+abs(-3.5f)); System.out.println("-2.12345的絕對值="+abs(-2.12345)); } public static int abs(int x){ //Math.abs()===>求絕對值 return Math.abs(x); } public static double abs(double x){ return Math.abs(x); } public static float abs(float x){ return Math.abs(x); } }

使用遞迴方式計算(1*2)+(2*3)+....(n)*(n-1)的值

package Method; /* * 使用遞迴方式計算(1*2)+(2*3)+....(n)*(n-1)的值 * 必須設定當輸入<=0的數字時強制結束程式 */ public class hw7_22 { public static void main(String[] args) { int num=10; System.out.println("(1*2)+(2*3)+....(n)*(n-1)....+當n="+num+"的總和為"+sum(num)); } public static int sum(int n){ if(n<=0){ //防止輸入負數 System.out.println("請輸入大於0的整數"); System.exit(-1); } if(n==1){ return 0; //sum(1)時為0 } return ((n-1)*(n))+sum(n-1); } } //STEP1:4*5+sum(4) //STEP2:3*4+sum(3) //STEP3:2*3+sum(2) //STEP4:2*1+sum(1) //STEP5:0+2 //STEP6:2+6 //STEP7:8+12 //STEP8:20+20