目前分類:Classadvanced (3)

瀏覽方式: 標題列表 簡短摘要
package classadvanced;
/*
 * 傳遞物件陣列到函數裡
 * EX:建立10個物件陣列,值為1~100的亂數整數
 * (a)建立有一引數(int r)的建構元設定實例變數radius的值
 * (b)傳遞物件陣列到average函數中算radius平均並回傳
 * (c)傳遞物件陣列到compare函數中找出最大值並回傳
 */
class CCircle{
        private int radius;
        
        public CCircle(int r){
                this.radius=r;
        }
        
        public static double average(CCircle c[]){ //宣告為static函數,方便用類別名稱.函數名稱()呼叫
                double sum=0,average=0;
                for(int i=0;i<c.length;i++){
                        System.out.println("c["+i+"]="+c[i].radius);
                        sum+=c[i].radius;
                }
                average=(sum)/c.length;
                return average;
                
        }
        
        public static int compare(CCircle c[]){ //比較大小
                int max;
                max=c[0].radius;
                for(int i=0;i<c.length;i++){
                        if(max<c[i].radius){
                                max=c[i].radius;
                        }
                }
                return max;
        }
}

public class BasicArrayObject {

        public static void main(String[] args) {
                CCircle c[]=new CCircle[10]; //設定物件陣列大小
                for(int i=0;i<c.length;i++){  //亂數給值
                        c[i]=new CCircle((int)(Math.random()*100)+1);
                }
                System.out.printf("ArrayObject of average=%.2f\n",CCircle.average(c)); //印出平均取小數點第2位
                System.out.println("ArrayObject of maxvalue="+CCircle.compare(c));

        }

}

 


goodice0728 發表在 痞客邦 留言(0) 人氣()

package classadvanced;
/*
(a)試設計類別CWin,內含count變數(初值設為0)與count() method,只要每建立一個物件,count的值便加1。
   count可用來追蹤CWin物件建立的個數。
(b)試設計一個建構元Cwin(String str,int w, int h),當此建構元被呼叫時,便會自動設定color=str,width=w,height=h。
(c)請接續 (a) 的部份,請再設計一個沒有引數的建構元CWin(),使得當此建構元呼叫時,便會自動設定color="Red",width=2,height=2。
(d)試設計setZero() method,當此method呼叫時,count的值會被歸零。
(e)試設計setValue(int n) method,當此method呼叫時,count的值會被設為n。
 */
class CWin{
        /*
         * 宣告count為CWin類別變數,每當建立一個CWin物件時
         * 每一個物件的count變數均指向記憶體中的同一個位址
         * 也就是說count這個變數是由所有的物件所共用
         */
        public static int count=0; 
        public String color;
        public int width=0;
        public int height=0;
        
        public CWin(){
                this("Red",2,2);        
        }
        
        public  void countadd()
    {
                count++;
        }
        
        public CWin(String str,int w,int h){
                this.color=str;
                this.width=w;
                this.height=h;
                countadd();             
        }       
        public static void setZero(){
                count=0;
        }
        
        public static void setValue(int n){
                count=n;
        }
        
        public static void show(){
                System.out.println("cnt="+count);
        }       
        
}


public class BasicConstructor {

        @SuppressWarnings("static-access")
        public static void main(String[] args) {
                CWin num1=new CWin();
                num1.show(); //建立一個物件
                CWin num2=new CWin();
                num2.show(); //建立兩個物件
                
                System.out.println("將count歸零");
                num1.setZero();
                num1.show(); 
        }

}

 


goodice0728 發表在 痞客邦 留言(0) 人氣()

package classadvanced;
/*
 * 類別型態的變數練習
(a)試撰寫method,public void setND(int num, int den),可用來同時設定分數的分子與分母。
(b)試將CRational類別裡的show() method改寫成FractionCompute類別裡的函數成員,而非CRational類別裡的函數成員。
(c)試在CRational類別裡加入分數運算的相關method,其中所有method的傳回型態皆為CRational,且分數運算的結果不需化成最簡分數
(d)加入add(CRational r) method,它可用來將呼叫它的CRational物件與傳入的引數進行分數的相加,並傳回相加後的結果。
(e)加入sub(CRational r) method,它可用來將呼叫它的CRational物件與傳入的引數進行分數的相減,並傳回相減後的結果。
(f)加入mul(CRational r) method,它可用來將呼叫它的CRational物件與傳入的引數進行分數的相乘,並傳回相乘後的結果。
(g)加入div(CRational r) method,它可用來將呼叫它的CRational物件與傳入的引數進行分數的相除,並傳回相除後的結果。
(h)撰寫compare(CRational r1,CRational r2)函數來比較兩分數大小,並傳回較大者
(i)撰寫larger(CRational r)函數,用來判別呼叫larger()的CRational物件的值是否大於r,若是則傳回true,否則傳回false
 */
class CRational  // 分數類別
{
   public int n; //分子
   public int d; //分母
   
   public void setND(int num,int den){
           this.n=num;
           this.d=den;   
   }
   
   public CRational add(CRational r){ //分數相加
                  
           display(this,r,'+');
           CRational sum=new CRational();
           //切記不可用this.d或n=this.d或n(*+-/) 或r.d或n=r.d或n(*+-/) 會造成初始值變更
           sum.d=(this.d)*(r.d); //num1分母通分=num2分母通母
           sum.n=(this.n)*(r.d)+(r.n)*(this.d); //分子通分後相加
           return sum;     
   }
   
   public CRational sub(CRational r){ //分數相減
                  
           display(this,r,'-');
           CRational sum=new CRational();
           //切記不可用this.d或n=this.d或n(*+-/) 或r.d或n=r.d或n(*+-/) 會造成初始值變更
           sum.d=(this.d)*(r.d); //num1分母通分=num2分母通母
           sum.n=(this.n)*(r.d)-(r.n)*(this.d); //分子通分後相減
           return sum;  
           
   }
   
   public CRational mul(CRational r){ //分數相乘
                  
           display(this,r,'*');
           CRational sum=new CRational();
           sum.n=(this.n)*(r.n); //分子相乘
           sum.d=(this.d)*(r.d); //分母相乘
           return sum; //傳回結果
           
   }
     
   public CRational div(CRational r){ //分數相除
          
           display(this,r,'/');
           CRational sum=new CRational();
           sum.n=((this.n)*(r.d)); //num1分子*num2的分母=分子
           sum.d=(this.d)*(r.n); //num1分母*num2的分子=分母
           return sum; //傳回結果
           
   }
   
   public void display(CRational r1,CRational r2,char ch) {
              System.out.print("(");
              System.out.print(r1.n+"/"+r1.d);
              System.out.print(")");
              System.out.print(ch);
              System.out.print("(");
              System.out.print(r2.n+"/"+r2.d);
              System.out.print(")=");
   }
   
   public CRational compare(CRational r1,CRational r2){ //比較兩分數大小
           CRational sum=new CRational ();
           /*
            * 交叉相乘比大小
            */
           sum.n=((r1.n)*(r2.d)); //r1分子*r2的分母=r1
           sum.d=(r1.d)*(r2.n); //r1分母*r2的分子=r2
           if(sum.n>sum.d){ //r1>r2
                   return r1;
           }
           else
                   return r2;   
   }
   
   public boolean larger(CRational r){ //比較呼叫此函數的物件與被傳入的物件兩者誰大
           CRational sum=new CRational ();
           /*
            * 交叉相乘比大小
            */
           sum.n=((this.n)*(r.d)); //num1分子*num2的分母=num1
           sum.d=(this.d)*(r.n); //num1分母*num2的分子=num2
           if(sum.n>sum.d){  //num1>num2
                   return true;
           }
           else
                   return false;   
   }
 }
   


public class FractionCompute
{
   public static void main(String args[])
   
   
   {
           CRational num1=new CRational();
           CRational num2=new CRational();
           CRational result=new CRational(); //result儲存+-*/的結果
           CRational comparemax=new CRational();
           num1.setND(3, 4); //設定第一個數為3/4
           num2.setND(10, 2); //設定第二個數為10/2
           
           result=num1.add(num2); //計算分數相加
           show(result); //顯示結果
           
           result=num1.sub(num2); //計算分數相減
           show(result); //顯示結果
           
           
           result=num1.mul(num2); //計算分數相乘
           show(result); //顯示結果
           
           result=num1.div(num2); //計算分數相除
           show(result); //顯示結果
           
           result=comparemax.compare(num1, num2); //比較num1與num2的大小
           show(result); //顯示結果
           System.out.println("is  large");
           
          boolean larger=num1.larger(num2); //使用num1呼叫larger函數來比較傳入值num2
          System.out.println("num1>num2?"+larger); //顯示結果
                   
        
   }  
   public static void show(CRational result){
           System.out.println(result.n+"/"+result.d);
   }  
   
}

 


goodice0728 發表在 痞客邦 留言(0) 人氣()