目标黑马,我的自学之路:第十六章 基础测试实例

基础测试中的一道题,思考好久才想出来,现在拿出来看看,题目如下:

列出一个字符串的全字符组合情况,原始字符串中没有重复字符,例如: 原始字符串是"abc",打印得到下列所有组合情况:"a" "b" "c"   "ab" "bc" "ca" "ba" "cb" "ac""abc" "acb" "bac" "bca" "cab" "cba"
 

import java.io.*;
public class Text6 {
	
	public static void main(String[] args)  {
		
		//调用自定义方法获取strLen长度的字符串的所以组合形式
		allArray();
	}
	public static void allArray(){
		
		//开启键盘录入
		BufferedReader bufr=new BufferedReader(
				new InputStreamReader(System.in));
		String line=null;
		//读取键盘录入的内容,并处理异常
		try
		{
			line=bufr.readLine();
		}
		catch(IOException ie)
		{
			throw new RuntimeException("读取失败");
		}
		//将读取的字符串转换成字符数组
		char[] cha=line.toCharArray();
		//定义一个字符串缓冲区,一遍对遍历组合的字符串进行存储
		StringBuffer sb=new StringBuffer();
		//将字符串添加到字符串缓冲区,以完成setCharAt操作
		sb.append(line);
		//定义一个指针,完成字符串缓冲区内字符的修改
		int count=0;
		int strLen=cha.length;
		//调用自定义方法获取字符串组合形式
		getSome(cha,strLen,sb,count);
		
	}
	public static void getSome(char[] cha,int strLen,
			StringBuffer sb,int count){
		
			//采用递归的方式,在遍历数组的同时完成不同字符数的不同组合,
			for(int x=0;x<cha.length;x++)
			{
				//更改指定Index的字符以完成相同字符数的不同组合
				sb.setCharAt(count,cha[x]);
				//字符串长度大于1时递归获取下一角标的字符
				if(strLen>1)
				{
					//保证count在递推的循环完成后与之前相同
					count++;
					getSome(cha,strLen-1,sb,count);
					count--;
					
				}
				//按照填入的字符数获取组合的字符串
				String s=sb.substring(0,count+1);
				//定义布尔型变量,用于判断字符数组中是否有相同元素
				boolean flog=true;
				//将字符串转换成字符数组
				char[] ss=s.toCharArray();
				//通过for嵌套判断该字符数组内是否有相同元素,并用flog记录
				for(int z=0;z<ss.length;z++){
					
					for(int m=z+1;m<ss.length;m++){
						
						if(ss[z]==ss[m])
							flog=false;
						}	
				}
				//如果没有,将字符数组转换成字符串并打印。
				if(flog)
						System.out.println(new String(ss,0,ss.length));
			}

	}
}


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值