恬然自得.活在當下: [功課]泛型方法多載化練習

2011年5月3日 星期二

[功課]泛型方法多載化練習

這次的功課,要將老師原本的範例檔GenericMethodTest改寫,多新增一個相同名稱的泛型方法,此方法要能夠將陣列中的某幾項元素抓取出來,並且當設定值不正確時,拋出一個InvalidSubscriptException例外錯誤。


執行結果:

系統內的三個陣列內容如下:
整數陣列:
1 2 3 4 5 6

浮點數陣列:
1.1 2.2 3.3 4.4 5.5 6.6 7.7

字元陣列:
H E L L O

測試整數陣列由1~4的元素值:
2 3 4 5

測試浮點數陣列由5~8的元素值:
錯誤訊息:您的上限值可能超過陣列元素個數 請重新檢查範圍

測試字元陣列由8~4的元素值:
錯誤訊息:您的上限值可能低於下限值 請重新檢查範圍

底下分享我自己寫的部分,另外也歡迎平時有光顧我網誌的讀者,可以在底下留言自己的寫法。^-^

寫法僅供參考,畢竟Java才學不到一年吧 >”<
(大家記得註解和程式碼要自己重新打過唷,工讀生會檢查;建議大家可以改寫Exception那邊的程式碼,這部分大家可多多嘗試不同的寫法唷,另外變數名稱和註解內容也修改掉)
程式碼:

>
public class s11967046 {
  
 public static void main(String[] args) {
  /* 11967046  
   * 
   * 請將GenericMethodTest.java中
   * 的泛型printArray方法多載化,
   * 讓他可以接收兩個額外的整數引數:
   * lowSubscript和highSubscript。
   * 呼叫這個方法只會印出陣列中指定的區域。
   * 請檢查lowSubscript和highSubscript,
   * 如果有一個超過範圍,或是highSubscript
   * 小於等於lowSubscript,這個多載化的方法應該拋出
   * InvalidSubscriptException;否則應該回傳印出的元素個數。
   * 然後修改main,以integerArray、doubleArray、
   * characterArray這些陣列實驗兩種版本的printArray。
   * 測試這兩種printArray版本的功能。 
   */
  
    Integer[] integerArray = { 1, 2, 3, 4, 5, 6 };
       Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };
       Character[] characterArray = { 'H', 'E', 'L', 'L', 'O' };
       
       System.out.println("系統內的三個陣列內容如下:");
       
       System.out.println( "整數陣列:" );
       printArray(integerArray);
       System.out.println( "\n浮點數陣列:" );
       printArray(doubleArray);
       System.out.println( "\n字元陣列:" );
       printArray(characterArray);
       
       System.out.println("\n測試整數陣列由1~4的元素值:");        
    //呼叫第二個方法,擷取陣列內指定的區域
    printArray(integerArray, 1, 4); 
    
    System.out.println("\n測試浮點數陣列由5~8的元素值:");
    //呼叫此方法應該會拋出InvalidSubscriptException
    printArray(doubleArray, 5, 8); 
    
    System.out.println("\n測試字元陣列由8~4的元素值:");
    //呼叫此方法應該會拋出InvalidSubscriptException
    printArray(characterArray, 8, 4); 
    
 }
 
 public static < E > void printArray( E[] inputArray ){
       //顯示陣列元素
       for ( E element : inputArray )
          System.out.printf( "%s ", element );

       System.out.println();
 } 
 
 //多載printArray方法
 public static < E > void printArray( E[] inputArray ,int lowSubscript, int highSubscript){
       
       try{
        if(highSubscript <= lowSubscript){
         //拋出InvalidSubscriptException
         throw new InvalidSubscriptException(
           "您的上限值可能低於下限值");
        }else if(highSubscript >= inputArray.length){
         //拋出InvalidSubscriptException
         throw new InvalidSubscriptException(
           "您的上限值可能超過陣列元素個數");
        }
        
      //顯示lowSubscript和highSubscript之間的陣列元素
        for (int i = lowSubscript;i<=highSubscript;i++){
         System.out.printf("%s ",inputArray[i]);
        }

        System.out.println();
        
       }catch (InvalidSubscriptException e){
        System.out.print("錯誤訊息:");
        System.out.println(e.getMessage());
       }
 } 

}

//自定義InvalidSubscriptException的錯誤訊息
class InvalidSubscriptException extends Exception{
 
 public InvalidSubscriptException(String message){
  super(message + " 請重新檢查範圍");
 }
}

沒有留言:

張貼留言

歡迎提供良性建議^_^