2013年5月21日 星期二

物件導向設計原理期末考(I)


1. 將兩班成績分數透過切割函數,切割成小字串,整數字串轉成整數且存於整數陣列,
(a) 將整數陣列當作score建構方法參數,且產生一score物件。
(b) 再透過score物的成員方法完成題目的要求。
   class score包括:
一個資料成員:
int[] data;
  一個建構方法:
score(int[] dd)    // 設定int[] data初始值
兩個成員方法:
getLevelNum( base)     // 傳回整數 base (含)分數以上人數
getPassAvg() // 傳回及格成績的平均分數(小數後兩位)



class score{
 int[] data;

 score(int[] dd){
  data=dd;
 }
 int getLevelNum(int base){
  int num=0;

  for(int kk:data) 
   if(kk >= base) num++;
  return num;
 }

 double getPassAvg(){
  int sum=0, num=0;
  
  num=getLevelNum(60);
  for(int i:data) {
   if(i>=60) sum+=i; 
  }
  return (int)((double)sum/num*100)/100.0;
 }
}

class prob10507{
        public static void main(String[] args){

 String IMDA="IMDA,75,88,62,77,69,82,79,85,93,44,81,53,66,71";
 String IMDB="IMDB/55/68/72/57/83/77/93/75/66/85/83/47/52/87/96/53/62/89/76/51";
 int gradeA, gradeB, gradeC, gradeD,gradeF; 

        String[] token=IMDA.split("[,]");
 int[] data=new int[token.length-1];

 for(int i=1;i<token.length;i++)
  data[i-1]=Integer.parseInt(token[i]);

 score cls1=new score(data);
                gradeA=cls1.getLevelNum(90);
                gradeB=cls1.getLevelNum(80)-cls1.getLevelNum(90);
                gradeC=cls1.getLevelNum(70)-cls1.getLevelNum(80);
                gradeD=cls1.getLevelNum(60)-cls1.getLevelNum(70);
                gradeF=cls1.getLevelNum(0)-cls1.getLevelNum(60);
 System.out.println(" CLS Name: "+ token[0]);
 System.out.println("     Numbers of students: "+ (token.length-1));
 System.out.println("     Pass Average Number: "+cls1.getPassAvg());
 System.out.println("     grade A Number: "+gradeA);    // score >= 90
 System.out.println("     grade B Number: "+gradeB);    // score >= 80 and score < 90
 System.out.println("     grade C Number: "+gradeC);    // score >= 70 and score < 80
 System.out.println("     grade D Number: "+gradeD);   // score >= 60 and score < 70
 System.out.println("     grade F Number: "+gradeF);    // score < 60

        String[] token2=IMDB.split("[/]");
 int[] data2=new int[token2.length-1];

 for(int i=1;i<token2.length;i++)
  data2[i-1]=Integer.parseInt(token2[i]);

 score cls2=new score(data2);
                gradeA=cls2.getLevelNum(90);
                gradeB=cls2.getLevelNum(80)-cls2.getLevelNum(90);
                gradeC=cls2.getLevelNum(70)-cls2.getLevelNum(80);
                gradeD=cls2.getLevelNum(60)-cls2.getLevelNum(70);
                gradeF=cls2.getLevelNum(0)-cls2.getLevelNum(60);
 System.out.println(" CLS Name: "+ token2[0]);
 System.out.println("     Numbers of students: "+ (token2.length-1));
 System.out.println("     Pass Average Number: "+cls2.getPassAvg());
 System.out.println("     grade A Number: "+gradeA);
 System.out.println("     grade B Number: "+gradeB);
 System.out.println("     grade C Number: "+gradeC);
 System.out.println("     grade D Number: "+gradeD);
 System.out.println("     grade F Number: "+gradeF);
        }
}



2. (a) class degree 包括:
  一個建構方法:
degree( char, double)    // 設定degreeC, degreeF 初始值
兩個資料成員:
private: double degreeC, degreeF;
  四個成員方法:
private:  CtoF()    // degreeC  degreeF
private:  FtoC()    // degreeF  degreeC
public: getDegC()    // 傳回degreeC
public: getDegF()    // 傳回degreeF
(b) class check 繼承degree
  一個建構方法:
check(char, double)  //呼叫父類別之建構方法,設定degreeC, degreeF 初始值
有兩個成員方法:
public:  degChk()          // 傳回體溫狀態代碼(整數)
public:  toStatus(byte)    // 傳回體溫狀態(字串)
(c) 透過相關的成員方法完成題目要求(產業輸出內容)。

體溫、代碼與狀態對照表
~ 36.4c (97.5f)     -1 (Hypothermia) (體溫過低)
36.4c (97.5f) ~ 37.8c (100f)   0 (Normal) (正常)
37.8c (100.f) ~ 39.4c (103.0f)   1 (Fever) (發燒)
39.4c (103.0f) ~ 40.3c (104.5f)   2 (High Fever) (高燒)
40.3c (104.5f) ~               3 (Serious) (嚴重)



class degree{
 private double degC=0, degF=32;

 degree(char CF, double dd){
  if(CF=='C'){
   degC=dd;
   CtoF();
  }else if(CF=='F'){
   degF=dd;
   FtoC();
  }
 }
 private void CtoF(){
  degF=degC*5.0/9.0+32;
 }
 private void FtoC(){
  degC=(degF-32)/9.0*5.0;
 }
 double getDegC(){
  return degC;
 }
 double getDegF(){
  return degF;
 }
}

class check extends degree{
 check(char cc, double dd){
  super(cc,dd);
 }
  
 byte degChk(){               // if-else statement 
                double degC=getDegC();            // call getDegC to get degC
  if(degC < 36.4) return -1;
                else if(degC < 37.8) return 0;
                else if(degC < 39.4) return 1;
                else if(degC < 40.3) return 2;
                else return 3;

 }
 String toStatus(byte n){     // switch case statement
  switch(n){
  case -1:
   return "Hypothermia";
  case 0:
   return "Normal";
  case 1:
   return "Fever";
  case 2:
   return "High Fever";
  default:
   return "Serious";
  }
 } 
}
 
class prob20507{
        public static void main(String[] args){

  check c1 =new check('C',38.3);

 System.out.println(" degree C "+c1.getDegF());
 System.out.println(" degree F "+c1.getDegC());
 System.out.println("   Status code: "+ c1.degChk());
 System.out.println("   Degree Status: "+c1.toStatus(c1.degChk()));

 check c2 = new check('F',103.5);
 System.out.println(" degree C "+c2.getDegF());
 System.out.println(" degree F "+c2.getDegC());
 System.out.println("   Status code: "+ c2.degChk());
 System.out.println("   Degree Status: "+c2.toStatus(c2.degChk())); 
        }
}

沒有留言:

張貼留言