本帖最后由 VIP1108210117 于 2015-6-11 23:30 编辑
之前在做入学测试题时,在论坛也看到过一些解法,http://bbs.itheima.com/thread-145369-1-1.html
但是在输入的字符串中包含程序中所用的字符串分割符(此程序中分割符为逗号)的情况下,
如输入“a,c”时,输出结果就不再是所输字符串的全字符组合情况了。
我的思路是,可以通过计算字符排列种类确定新一行的数组长度,代码如下:
package com.itheima;
import java.lang.reflect.Array;
import java.util.Scanner;
/**
* 7、 编程列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如:
* 原始字符串是"abc",打印得到下列所有组合情况:
* "a" "b" "c"
* "ab" "bc" "ca" "ba" "cb" "ac"
* "abc" "acb" "bac" "bca" "cab" "cba"
*
* @author Administrator
*
*/
public class Test7 {
public static void main(String[] args) {
System.out.println("请输入一个字符串:");
//实例化Scanner工具类,获取封装后的标准输入流
Scanner input = new Scanner(System.in);
String str = input.nextLine();
input.close();
showStr(str);
}
/**
* 计算并输入字符串的全字符组合情况
* @param 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=""+array;
}//构建初始字符串元素数组
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)行排列情况
}
}
/**
* 计算字符排列情况的总数
* 排列,就是指从给定个数的元素中取出指定个数的元素进行排序
* @param length 待排列字符的总数
* @param i 待排列字符的个数
* @return
*/
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;
}
/**
* 根据前一行的组合,获取新组合
* @param array
* @param strs
* @return
*/
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.indexOf(array[j])<0){
newStrs[count++]=strs+array[j];
}
}
}
return newStrs;
}
/**
* 输出指定内容
* @param obj
*/
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();
}
}
|
|