- import java.util.*;
- import java.io.*;
- import java.lang.reflect.*;
- public class Test {
- public static void main(String[] args) {
- System.out.println("请输入一个字符串:");
- //实例化Scanner工具类,获取封装后的标准输入流
- Scanner input = new Scanner(System.in);
- String str = input.nextLine();
- input.close();
- showStr(str);
- }
- /**
- * 计算并输入字符串的全字符组合情况
- */
- public static void showStr(String str) {
- char[] array = str.toCharArray();
- String[]strs=new String[array.length];
- for (int i = 0; i < array.length; i++) {
- strs[i]=""+array[i];
- }//构建初始字符串元素数组
- printObj(strs);//输出第一行排列情况
- for (int i = 1; i < array.length; i++) {
- //getAmn方法用于计算第(i+1)行字符排列情况的总数
- strs=getNewStrs(array,strs,getAmn(array.length,i+1));
- printObj(strs);//输出第(i+1)行排列情况
- }
-
- }
- /**
- * 计算字符排列情况的总数
- * 排列,就是指从给定个数的元素中取出指定个数的元素进行排序
- */
- private static int getAmn(int length, int i) {
- //System.out.print("A(" + length + "," + i + ")=");
- int sum = 1;
- while (i != 0) {
- sum *= (length--);
- i--;
- }
- //System.out.println(sum);
- return sum;
- }
- /**
- * 根据前一行的组合,获取新组合
- */
- private static String[] getNewStrs(char[] array, String[] strs,int sum) {
- String[]newStrs=new String[sum];
- int count=0;
- for (int i = 0; i < strs.length; i++) {
- for (int j = 0; j < array.length; j++) {
- if(strs[i].indexOf(array[j])<0){
- newStrs[count++]=strs[i]+array[j];
-
- }
- }
- }
- System.out.println(newStrs[0]);
- return newStrs;
- }
- /**
- * 输出指定内容
- */
- private static void printObj(Object obj) {
- Class<? extends Object> clazz=obj.getClass();
- if(clazz.isArray()){
- int len=Array.getLength(obj);
- for(int i=0;i<len;i++)
- System.out.print("\""+Array.get(obj, i)+"\""+"\t");
- }else{
- System.out.println(obj);
- }
- System.out.println();
- }
- }
复制代码
借花献佛,看到别人的思路,自己改良了下代码,希望能帮助到你。 |