A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*第6题:
* 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
*原始字符串是"abc",打印得到下列所有组合情况:
*"a" "b" "c"
*"ab" "bc" "ca" "ba" "cb" "ac"
*"abc" "acb" "bac" "bca" "cab" "cba"
*分析:根据上面组成结构采用双重循环,可以先建一个数组用于存放第一行最基本的元素,
*    第一行元素循环组合成第二行字符串得到新字符串,将新的字符串封装到ArrayList中并记录下最后一个元素位置
*    然后将ArrList变成数组,将其中元素均与最基本元素相结合,并记录下最后一个元素位置依次就可以得到所有的组合
*/
public class Test6 {
        public static void sop(Object obj){
                System.out.println(obj);
        }
        public static void main(String[] args){
                String str ="abc";
                get(str);
        }
        public static void get(String str){
                //创建字符串长度的数组用以存放最基本元素
                String[] arr=new String[str.length()];
                //创建ArrList集合用以存放后续数据
                ArrayList<String> mylist=new ArrayList<String>();
                for(int k=0;k<str.length();k++){
                        arr[k]=str.substring(k, k+1);
                        mylist.add(str.substring(k, k+1));
                }
               
                int a=0;
                int b=mylist.size();//作为标记新元素位置
               
                for(int i=a;i<b;i++){//外循环控制新元素的循环
                        for(int j=0;j<str.length();j++){//内循环负责新元素与基本元素的结合
                                //将mylist变为数组形式方便利用数组的contain方法
                                if(!mylist.toArray()[i].toString().contains(arr[j])){
                                        mylist.add(mylist.toArray()[i]+arr[j]);
                                        a=a+1;
                                        b=b+1;//每增加一个元素a就加一
                                }
                        }
                }
                Iterator<String> it = mylist.iterator();//创建迭代器
                while(it.hasNext()){
                        sop(it.next());
                }
        }       
}

2 个回复

倒序浏览
  1. package com.itheima;
  2. import java.util.ArrayList;
  3. import java.util.Iterator;

  4. /*第6题:
  5. * 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
  6. *原始字符串是"abc",打印得到下列所有组合情况:
  7. *"a" "b" "c"
  8. *"ab" "bc" "ca" "ba" "cb" "ac"
  9. *"abc" "acb" "bac" "bca" "cab" "cba"
  10. *分析:根据上面组成结构采用双重循环,可以先建一个数组用于存放第一行最基本的元素,
  11. *    第一行元素循环组合成第二行字符串得到新字符串,将新的字符串封装到ArrayList中并记录下最后一个元素位置
  12. *    然后将ArrList变成数组,将其中元素均与最基本元素相结合,并记录下最后一个元素位置依次就可以得到所有的组合
  13. */
  14. public class Test6 {
  15.         public static void sop(Object obj){
  16.                 System.out.println(obj);
  17.         }
  18.         public static void main(String[] args){
  19.                 String str ="abc";
  20.                 get(str);
  21.         }
  22.         public static void get(String str){
  23.                 //创建字符串长度的数组用以存放最基本元素
  24.                 String[] arr=new String[str.length()];
  25.                 //创建ArrList集合用以存放后续数据
  26.                 ArrayList<String> mylist=new ArrayList<String>();
  27.                 for(int k=0;k<str.length();k++){
  28.                         arr[k]=str.substring(k, k+1);
  29.                         mylist.add(str.substring(k, k+1));
  30.                 }               
  31.                 int a=0;
  32.                 int b=mylist.size();//作为标记新元素位置               
  33.                 for(int i=a;i<b;i++){//外循环控制新元素的循环
  34.                         for(int j=0;j<str.length();j++){//内循环负责新元素与基本元素的结合
  35.                                 //将mylist变为数组形式方便利用数组的contain方法
  36.                                 if(!mylist.toArray()[i].toString().contains(arr[j])){
  37.                                         mylist.add(mylist.toArray()[i]+arr[j]);
  38.                                         a=a+1;
  39.                                         b=b+1;//每增加一个元素a就加一
  40.                                 }
  41.                         }
  42.                 }
  43.                 Iterator<String> it = mylist.iterator();//创建迭代器
  44.                 while(it.hasNext()){
  45.                         sop(it.next());
  46.                 }
  47.         }       
  48. }
复制代码


回复 使用道具 举报
地32行、33行完全都是多余的!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马