从键盘读入一个由字母构成的串(不大于30个字符)。
从该串中取出3个不重复的字符,求所有的取法。
取出的字符,要求按字母升序排列成一个串。
不同的取法输出顺序可以不考虑。
例如:
输入:
abc
则输出:
abc
输入:
abcd
则输出:
abc
abd
acd
bcd
输入:
abcaa
则输出:
abc
要求考生把所有类写在一个文件中。
调试好后,存入与考生文件夹下对应题号的“解答.txt”中即可。
相关的工程文件不要拷入。请不要使用package语句。
另外,源程序中只能出现JDK1.5中允许的语法或调用。不能使用1.6或更高版本。
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class QuZiFu {
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
String str=scan.next();
if(str.length()<3){
System.out.println("请输入3个以上字符的串!");
System.exit(0);
}
List list=new ArrayList<String>();
for (int i = 0; i < str.length(); i++) {
for (int j = 0; j < str.length(); j++) {
for (int k = 0; k < str.length(); k++) {
if(i==j||j==k||i==k||String.valueOf(str.charAt(i)).equals(String.valueOf(str.charAt(j)))
||String.valueOf(str.charAt(i)).equals(String.valueOf(str.charAt(k)))
||String.valueOf(str.charAt(j)).equals(String.valueOf(str.charAt(k)))){
continue;
//i==j||j==k||i==k这三个条件是判断如果下标相等,则肯定有重复的字母
//后边三个条件是判断这种情况abcaa,下标不相等,但是内容相等.
}
//temp取到三个不同的字符后,转换为字符串。
String temp=String.valueOf(str.charAt(i))+String.valueOf(str.charAt(j))+String.valueOf(str.charAt(k));
if(judge(list,temp)||list.size()==0){ //调用判断函数,如果temp在list里没有的话,把temp加进list中去。
//list.size()==0是当没有元素时,直接加进去。
list.add(temp);
}
}
}
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); //输出
}
}
static boolean judge(List<String> list,String temp){//temp为当前字符串,list保存的是已经加进去的字符串
boolean f=false;
char[] c1=temp.toCharArray(); //将当前串转换为字符数组
java.util.Arrays.sort(c1); //将当前串排序,排序的目的是:如,abc和acb俩个字符串经过排序后都是abc,好比较!
String temp1=new String(c1); //转换为字符串
for (int i = 0; i < list.size(); i++) {
char[] c2=list.get(i).toCharArray();//将list中串转换为字符数组
java.util.Arrays.sort(c2); //将list串排序
String temp2=new String(c2); //list串转换为字符串
if(!temp2.equals(temp1)){ //经过排序后的当前字符串如果和list中的串不相等的话
f=true; //f=true可以加入list
}else{
f=false; //否则false,不加入list,跳出循环
break;
}
}
return f; //返回结果
}
}