創作內容

9 GP

(java)印出所有排列組合

作者:深海異音│2014-09-26 03:23:50│贊助:1,019│人氣:3917

//  印出所有排列組合的類別
class
  Permutations<T>  {

      public  Permutations(T  obj)  {//  泛型(支援任何陣列、集合、字串)

             if  (obj  instanceof  Collection) {// 如果是集合,就轉成Object陣列

                   Object[]  o  =  new  Object[((Collection)  obj).size()];
                   int  i  =  0;
                   for  (Object x  :  (Collection)  obj)
                          o[i++]  =  x;

                   int  len  =  ((Collection)  obj).size() -  1;
                   perm(o,  0,  len);

             } else  if  (obj  instanceof  String) {//如果是字串,就切割成Object陣列

                   String[]  s  =  ((String) obj).split("");
                   
                   String[]  s2  =  new  String[s.length  -  1];//第一個是空白,所以必須去掉
                   for  (int  i  =  0;  i  <  s2.length;  i++)
                          s2[i]  =  s[i  +  1];

                   int  len  =  ((Object[]) s2).length  -  1;
                   perm((Object[])  s2,  0,  len);

             }
             else  {//  任何陣列都可以直接轉換成Object陣列

                   int  len  =  ((Object[]) obj).length  -  1;
                   perm((Object[])  obj,  0,  len);

             }
      }

      private  void  perm(Object[] list,  int  k,  int  m)  {

             if  (k  ==  m)  {//  印出行

                   for  (int  i  =  0;  i  <=  m;  i++)
                          System.out.print(list[i]  +  " ");
                   System.out.println();

             } else  {//  繼續交換

                   for  (int  i  =  k;  i  <=  m;  i++)  {
                          swap(list,  k,  i);  //  交換
                          perm(list,  k  +  1,  m);  //  遞迴,後面2個參數相等表示可印出
                          swap(list,  k,  i);  //  (因為是傳址呼叫,所以要換回來)
                   }

             }
      }

      private  void  swap(Object[] array,  int  x1,  int  x2)  {//  交換
             Object  z  =  array[x1];
             array[x1]  =  array[x2];
             array[x2]  =  z;
      }

}



使用方法很簡單,不管是 陣列、集合、字串,通通都可以使用




public  class  Test_1 {
      public  static  void  main(String[] args)  {
 
             System.out.println("一般陣列===========");
             String[]  array  =  {  "aa",  "bb",  "cccc"  };
             new  Permutations<String[]>(array);
             //
             //
             System.out.println("\n類別陣列===========");
             Cla[]  array2 =  new  Cla[3];
             for  (int  i  =  0;  i  <  array2.length;  i++)
                   array2[i]  =  new  Cla(i  +  "");
             new  Permutations<Cla[]>(array2);
             //
             //
             System.out.println("\n集合===========");
             ArrayList  array3 =  new  ArrayList();
             array3.add(81000);
             array3.add(3.14);
             array3.add("ㄎㄧㄤ");
             new  Permutations<ArrayList>(array3);
             //
             //
             System.out.println("\n字串===========");
             String  array4 =  "野格炸";
             new  Permutations<String>(array4);
 
      }
}
 
class  Cla  {
      String s;
 
      Cla(String s)  {
             this.s  =  s;
      }
 
      @Override
      public  String toString()  {//改寫toString,不然會引出記憶體位址
             return  s;
      }
}


引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2604943
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 2 篇留言

AB性感小公舉
這讓我想到高一數學

09-26 10:50

貓貓風 ฅ●ω●ฅ
跟 C 的 template 一樣,支援所有資料型別

10-13 17:17

我要留言提醒:您尚未登入,請先登入再留言

9喜歡★hbl917070 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:楓之谷傳統登入(快速換帳... 後一篇:愛私 【1.0版】(附原...

追蹤私訊

作品資料夾

a7119926怎麼會
今天過得好充實、好害羞、好甜蜜><!看更多我要大聲說昨天20:35


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】